diff --git a/NOTICE b/NOTICE
index de0fa23..41bc327 100644
--- a/NOTICE
+++ b/NOTICE
@@ -19,4 +19,79 @@
 
 ## Third-party Content
 
-TBD
\ No newline at end of file
+Eclipse Milo
+ 
+ * License: EPL 2.0
+ 
+javax.servlet-api
+
+ * License: CDDL
+ 
+javax.ws.rs-api 
+
+ * License: EPL 2.0
+ 
+jersey-client 
+
+ * License: EPL 2.0
+
+jersey-hk2 
+
+ * License: EPL 2.0
+ 
+Tomcat-catalina
+
+ * License: Apache License 2.0
+ 
+Apache poi-ooxml
+
+ * License: Apache License 2.0
+ 
+Logback 
+
+ * License: EPL 1.0
+
+Janino 
+
+ * License: BSD 3
+
+Eclipse Paho
+
+ * License:  EPL 2.0
+ 
+Postgres
+
+ * License: PostgreSQL Licence
+ 
+GSON 
+
+ * License: Apache License 2.0
+ 
+HikariCP 
+
+ * License: EPL 1.0
+ 
+mongodb-driver-sync
+
+ * License: Apache License 2.0
+ 
+spring-data-mongodb
+
+ * License: Apache License 2.0
+ 
+Moquette
+
+ * License: Apache License 2.0
+ 
+
+To be extended
+
+
+## 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.
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/pom.xml b/components/basys.components/basyx.components.docker/basyx.components.AASServer/pom.xml
index 88e4939..9480492 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/pom.xml
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/pom.xml
@@ -54,6 +54,14 @@
 			<artifactId>basyx.sdk</artifactId>
 			<classifier>tests</classifier>
 		</dependency>
+		
+		<!-- Used for reading .aasx files -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+			<version>4.1.2</version>
+		</dependency>
+		
 	</dependencies>
 	
 	<profiles>
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/AASServerComponent.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/AASServerComponent.java
index b09c4e6..1e5566e 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/AASServerComponent.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/AASServerComponent.java
@@ -11,6 +11,7 @@
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.catalina.servlets.DefaultServlet;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.eclipse.basyx.aas.aggregator.AASAggregator;
 import org.eclipse.basyx.aas.aggregator.api.IAASAggregator;
 import org.eclipse.basyx.aas.aggregator.restapi.AASAggregatorProvider;
@@ -191,7 +192,7 @@
 	}
 
 	private void loadBundleFromAASX(String aasxPath)
-			throws IOException, ParserConfigurationException, SAXException, URISyntaxException {
+			throws IOException, ParserConfigurationException, SAXException, URISyntaxException, InvalidFormatException {
 		logger.info("Loading aas from aasx \"" + aasxPath + "\"");
 
 		// Instantiate the aasx package manager
@@ -233,7 +234,7 @@
 			} else if (aasSource.endsWith(".xml")) {
 				loadBundleFromXML(aasSource);
 			}
-		} catch (IOException | ParserConfigurationException | SAXException | URISyntaxException e) {
+		} catch (IOException | ParserConfigurationException | SAXException | URISyntaxException | InvalidFormatException e) {
 			logger.error("Could not load initial AAS from source '" + aasSource + "'");
 			logger.info("Starting empty server instead");
 		}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/AASXPackageManager.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/AASXPackageManager.java
index 8a116ab..8998f7f 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/AASXPackageManager.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/AASXPackageManager.java
@@ -2,9 +2,10 @@
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringWriter;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
@@ -15,14 +16,16 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
+import org.apache.poi.openxml4j.opc.PackagingURIHelper;
 import org.eclipse.basyx.components.configuration.BaSyxConfiguration;
 import org.eclipse.basyx.components.xml.XMLAASBundleFactory;
 import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
@@ -33,23 +36,24 @@
 import org.eclipse.basyx.vab.modelprovider.VABPathTools;
 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;
+
 /**
  * The AASX package converter converts a aasx package into a list of aas, a list
  * of submodels a list of assets, a list of Concept descriptions
  * 
  * The aas provides the references to the submodels and assets
  * 
- * @author zhangzai
+ * @author zhangzai, conradi
  *
  */
 public class AASXPackageManager {
 
 
+	private static final String XML_TYPE = "http://www.admin-shell.io/aasx/relationships/aas-spec";
+	private static final String AASX_ORIGIN = "/aasx/aasx-origin";
+	
+	
 	/**
 	 * Path to the AASX package
 	 */
@@ -77,14 +81,16 @@
 		aasxPath = path;
 	}
 
-	public Set<AASBundle> retrieveAASBundles() throws IOException, ParserConfigurationException, SAXException {
+	public Set<AASBundle> retrieveAASBundles() throws IOException, ParserConfigurationException, SAXException, InvalidFormatException {
 		
 		// If the XML was already parsed return cached Bundles
 		if(bundles != null) {
 			return bundles;
 		}
 		
-		bundleFactory = new XMLAASBundleFactory(getXMLResourceString(aasxPath));
+		OPCPackage aasxRoot = OPCPackage.open(getInputStream(aasxPath));
+		
+		bundleFactory = new XMLAASBundleFactory(getXMLResourceString(aasxRoot));
 		
 		bundles = bundleFactory.create();
 		
@@ -92,133 +98,37 @@
 	}
 
 	/**
-	 * Find the path of the aas-xml file
-	 * 
-	 * @param stream - Stream of the aasx package
-	 * @return Path of the aas xml file, empty string if not found
-	 * @throws IOException
-	 * @throws ParserConfigurationException
-	 * @throws SAXException
-	 */
-	private String findAASXml(ZipInputStream stream) throws IOException, ParserConfigurationException, SAXException {
-		String path = "";
-		// find the entry of the aasx
-		for (ZipEntry entry; (entry = stream.getNextEntry()) != null;) {
-
-			// get name of the entry
-			String name = entry.getName();
-
-			// find the relationship file in the directory /aasx/_rels/aas_origin.rels
-			if (!entry.isDirectory() && name.startsWith("aasx/_rels")) {
-				// find the file aasx-origin.rels
-				if (name.endsWith("aasx-origin.rels")) {
-					// Get path of the aas xml
-					String aasXmlPath = findAASXMLAddress(stream);
-					if (!aasXmlPath.isEmpty()) {
-						path = aasXmlPath;
-						break;
-					}
-				}
-			}
-		}
-		return path;
-	}
-
-	/**
-	 * Get entry of a file
-	 * 
-	 * @param filename - name of a file with path
-	 * @return a file entry
-	 * @throws IOException
-	 */
-	private ZipInputStream returnFileEntryStream(String filename, ZipInputStream stream) throws IOException {
-		ZipInputStream str = null;
-		if (filename.startsWith("/")) {
-			filename = filename.substring(1);
-		}
-
-		// get all entries of the aasx
-		for (ZipEntry e; (e = stream.getNextEntry()) != null;) {
-			// get name of the entry
-			String name = e.getName();
-			if (name.equals(filename)) {
-				str = stream;
-				break;
-			}
-		}
-		return str;
-	}
-
-	/**
-	 * Parse the relationship file and find the path of the aas-XML file describing
-	 * the aas
-	 * 
-	 * @param ins - input stream of this relationship file
-	 * @return path of the aas-xml file
-	 * @throws ParserConfigurationException
-	 * @throws SAXException
-	 * @throws IOException
-	 */
-	private String findAASXMLAddress(InputStream ins) throws ParserConfigurationException, SAXException, IOException {
-		String path = "";
-
-		// create the XML document parser
-		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
-		DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
-		Document doc = dBuilder.parse(ins);
-		doc.getDocumentElement().normalize();
-
-		// Get the tag with "Relationships"
-		logger.info("Root element :" + doc.getDocumentElement().getNodeName());
-		NodeList relList = doc.getElementsByTagName("Relationship");
-
-		// If there is only 1 relationship pointing to the aas-xml file, this should be
-		// the case
-		if (relList.getLength() == 1) {
-			Node first = relList.item(0);
-
-			if (first.getNodeType() == Node.ELEMENT_NODE) {
-				logger.info("\nCurrent Element :" + first.getNodeName());
-				// get the target file path
-				String targetFile = ((Element) first).getAttribute("Target");
-				String type = ((Element) first).getAttribute("Type");
-
-				// validate the relationship type
-				if (type.endsWith("aas-spec")) {
-					logger.info("target file name : " + targetFile);
-					path = targetFile;
-				}
-			}
-		}
-		return path;
-	}
-
-	/**
 	 * Return the Content of the xml file in the aasx-package as String
 	 * 
-	 * @param filePath - path to the aasx package
+	 * @param aasxPackage - the root package of the AASX
 	 * @return Content of XML as String
+	 * @throws InvalidFormatException 
 	 * @throws IOException
-	 * @throws ParserConfigurationException
-	 * @throws SAXException
 	 */
-	private String getXMLResourceString(String filePath) throws IOException, ParserConfigurationException, SAXException {
-		String aasXmlPath;
-		// Create the zip input stream
-		try (ZipInputStream stream = getZipInputStream(filePath)) {
+	private String getXMLResourceString(OPCPackage aasxPackage) throws InvalidFormatException, IOException {
 
-			// find the path of the aas xml
-			aasXmlPath = this.findAASXml(stream);
+		// Get the "/aasx/aasx-origin" Part. It is Relationship source for the XML-Document
+		PackagePart originPart = aasxPackage.getPart(PackagingURIHelper.createPartName(AASX_ORIGIN));
+		
+		// Get the Relation to the XML Document
+		PackageRelationshipCollection originRelationships = originPart.getRelationshipsByType(XML_TYPE);
+		
+		
+		// If there is more than one or no XML-Document that is an error
+		if(originRelationships.size() > 1) {
+			throw new RuntimeException("More than one 'aasx-spec' document found in .aasx");
+		} else if(originRelationships.size() == 0) {
+			throw new RuntimeException("No 'aasx-spec' document found in .aasx");
 		}
-
-		try (ZipInputStream stream = getZipInputStream(filePath)) {
-			// Find the entry of the aas xml
-			ZipInputStream streamPointingToEntry = this.returnFileEntryStream(aasXmlPath, stream);
-
-			// create the xml-converter with the input stream
-			String text = IOUtils.toString(streamPointingToEntry, StandardCharsets.UTF_8.name());
-			return text;
-		}
+		
+		// Get the PackagePart of the XML-Document
+		PackagePart xmlPart = originPart.getRelatedPart(originRelationships.getRelationship(0));
+		
+		// Read the content from the PackagePart
+		InputStream stream = xmlPart.getInputStream();
+		StringWriter writer = new StringWriter();
+		IOUtils.copy(stream, writer, StandardCharsets.UTF_8);
+		return writer.toString();
 	}
 
 	/**
@@ -229,10 +139,11 @@
 	 * @throws IOException
 	 * @throws SAXException
 	 * @throws ParserConfigurationException
+	 * @throws InvalidFormatException 
 	 * 
 	 */
 	private List<String> parseReferencedFilePathsFromAASX()
-			throws IOException, ParserConfigurationException, SAXException {
+			throws IOException, ParserConfigurationException, SAXException, InvalidFormatException {
 		
 		Set<AASBundle> bundles = retrieveAASBundles();
 		
@@ -285,14 +196,16 @@
 	 * @throws SAXException
 	 * @throws ParserConfigurationException
 	 * @throws URISyntaxException
+	 * @throws InvalidFormatException 
 	 */
 	public void unzipRelatedFiles()
-			throws IOException, ParserConfigurationException, SAXException, URISyntaxException {
+			throws IOException, ParserConfigurationException, SAXException, URISyntaxException, InvalidFormatException {
 		// load folder which stores the files
 		List<String> files = parseReferencedFilePathsFromAASX();
+		OPCPackage aasxRoot = OPCPackage.open(getInputStream(aasxPath));
 		for (String filePath : files) {
 			// name of the folder
-			unzipFile(filePath, aasxPath);
+			unzipFile(filePath, aasxRoot);
 		}
 	}
 
@@ -316,9 +229,9 @@
 	 * @param aasxPath    - aasx path
 	 * @throws IOException
 	 * @throws URISyntaxException
+	 * @throws InvalidFormatException 
 	 */
-	private void unzipFile(String filePath, String aasxPath)
-			throws IOException, URISyntaxException {
+	private void unzipFile(String filePath, OPCPackage aasxRoot) throws IOException, URISyntaxException, InvalidFormatException {
 		// Create destination directory
 		if (filePath.startsWith("/")) {
 			filePath = filePath.substring(1);
@@ -329,62 +242,31 @@
 		Path destDir = rootPath.resolve(relativePath);
 		logger.info("Unzipping to " + destDir);
 		Files.createDirectories(destDir);
-
-		// create buffer for the folder binary
-		byte[] buffer = new byte[1024];
-
-		// Find the file with the "filePath"
-		try (ZipInputStream stream = getZipInputStream(aasxPath)) {
-			ZipEntry zipEntry = stream.getNextEntry();
-			while (zipEntry != null) {
-				if (!zipEntry.isDirectory() && zipEntry.getName().contains(filePath)) {
-					// Create the file object in the destination directory
-					File newFile = newFile(destDir.toFile(), zipEntry);
-
-					// Create the file output stream
-					try (FileOutputStream fos = new FileOutputStream(newFile)) {
-						int len;
-						// Write the binary to the file
-						while ((len = stream.read(buffer)) > 0) {
-							fos.write(buffer, 0, len);
-						}
-					}
-					return;
-				}
-				zipEntry = stream.getNextEntry();
-			}
+		
+		PackagePart part = aasxRoot.getPart(PackagingURIHelper.createPartName("/" + filePath));
+		
+		if(part == null) {
+			logger.error("File '" + filePath + "' cloud not be unzipped. It does not exist in .aasx.");
+			throw new FileNotFoundException("File '" + filePath + "' cloud not be unzipped. It does not exist in .aasx.");
 		}
+		
+		String targetPath = destDir.toString() + "/" + VABPathTools.getLastElement(filePath);
+		InputStream stream = part.getInputStream();
+		FileUtils.copyInputStreamToFile(stream, new File(targetPath));
 	}
-
-	/**
-	 * Preventing Zip Slip, create a file
-	 * 
-	 * @param destinationDir
-	 * @param zipEntry
-	 * @return
-	 * @throws IOException
-	 */
-	private File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {
-		String filename = VABPathTools.getLastElement(zipEntry.getName());
-
-		File destFile = new File(destinationDir, filename);
-
-		String destDirPath = destinationDir.getCanonicalPath();
-		String destFilePath = destFile.getCanonicalPath();
-
-		if (!destFilePath.startsWith(destDirPath + File.separator)) {
-			throw new IOException("Entry is outside of the target dir: " + zipEntry.getName());
-		}
-
-		return destFile;
-	}
-
-	private ZipInputStream getZipInputStream(String aasxFilePath) throws IOException {
-		try {
-			return new ZipInputStream(BaSyxConfiguration.getResourceStream(aasxFilePath));
-		} catch (NullPointerException ex) {
+	
+	private InputStream getInputStream(String aasxFilePath) throws IOException {
+		InputStream stream = BaSyxConfiguration.getResourceStream(aasxFilePath);
+		if(stream != null) {
+			return stream;
+		} else {
 			// Alternativ, if resource has not been found: load from a file
-			return new ZipInputStream(new FileInputStream(aasxFilePath));
+			try {
+				return new FileInputStream(aasxFilePath);
+			} catch (FileNotFoundException e) {
+				logger.error("File '" + aasxFilePath + "' to be loaded was not found.");
+				throw e;
+			}
 		}
 	}
 }
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXPackageManager.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXPackageManager.java
index 51af080..466192f 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXPackageManager.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXPackageManager.java
@@ -3,7 +3,9 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -12,19 +14,33 @@
 import java.util.Set;
 
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
 
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.eclipse.basyx.aas.factory.aasx.AASXFactory;
+import org.eclipse.basyx.aas.factory.aasx.InMemoryFile;
 import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.api.parts.asset.AssetKind;
+import org.eclipse.basyx.aas.metamodel.api.parts.asset.IAsset;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
 import org.eclipse.basyx.components.aas.aasx.AASXPackageManager;
 import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
 import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.parts.IConceptDescription;
 import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
 import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.File;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
 import org.eclipse.basyx.support.bundle.AASBundle;
-import org.junit.Before;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.xml.sax.SAXException;
 
@@ -33,26 +49,34 @@
  * submodels, assets and concept-descriptions. it also checks whether the aas
  * have correct references to the asets and submodels
  * 
- * @author zhangzai
+ * @author zhangzai, conradi
  *
  */
 public class TestAASXPackageManager {
 	/**
 	 * path to the aasx package
 	 */
-	private String aasxPath = "aasx/01_Festo.aasx";
+	private static final String aasxPath = "aasx/01_Festo.aasx";
+	
+	private static final String CREATED_AASX_PATH = "test.aasx";
 
 	/**
 	 * the aasx package converter
 	 */
-	private AASXPackageManager packageConverter;
+	private static AASXPackageManager packageConverter;
 
 	/**
 	 * this string array is used to check the refs to submodels of aas
 	 */
 	private String[] submodelids = { "www.company.com/ids/sm/6053_5072_7091_5102", "smart.festo.com/demo/sm/instance/1/1/13B7CCD9BF7A3F24", "www.company.com/ids/sm/4343_5072_7091_3242", "www.company.com/ids/sm/2543_5072_7091_2660",
 			"www.company.com/ids/sm/6563_5072_7091_4267"
-
+			
+	};
+	
+	/**
+	 * Files that are unzipped
+	 */
+	private static String[] unzipFiles = { "target/files/aasx/Document/docu.pdf", "target/files/icon.png"
 	};
 
 	/**
@@ -68,8 +92,8 @@
 	/**
 	 * Initialize the AASX package converter
 	 */
-	@Before
-	public void setup() {
+	@BeforeClass
+	public static void setup() {
 		// Create the aasx package converter with the path to the aasx package
 		packageConverter = new AASXPackageManager(aasxPath);
 	}
@@ -82,7 +106,7 @@
 		// Parse aas from the XML and create the AAS Bundle with refs to submodels
 		try {
 			aasBundles = packageConverter.retrieveAASBundles();
-		} catch (ParserConfigurationException | SAXException | IOException e) {
+		} catch (ParserConfigurationException | SAXException | IOException | InvalidFormatException e) {
 			e.printStackTrace();
 		}
 
@@ -92,6 +116,87 @@
 		// Check the submodels
 		checkSubmodels(submodels);
 	}
+	
+	
+	/**
+	 * Creates a new .aasx using the AASXFactory and tries to parse it
+	 */
+	@Test
+	public void testLoadGeneratedAASX()
+			throws InvalidFormatException, IOException, ParserConfigurationException, SAXException, TransformerException, URISyntaxException {
+		
+		List<IAssetAdministrationShell> aasList = new ArrayList<>();
+		List<ISubModel> submodelList = new ArrayList<>();
+		List<IAsset> assetList = new ArrayList<>();
+		List<IConceptDescription> conceptDescriptionList = new ArrayList<>();
+
+		List<InMemoryFile> fileList = new ArrayList<>();
+		
+		Asset asset = new Asset("asset-id", new ModelUrn("ASSET_IDENTIFICATION"), AssetKind.INSTANCE);
+		AssetAdministrationShell aas = new AssetAdministrationShell("aasIdShort", new ModelUrn("aasId"), asset);
+		aas.setAssetReference((Reference) asset.getReference());
+		
+		SubModel sm = new SubModel("smIdShort", new ModelUrn("smId"));
+		
+		// Create File SubmodelElements
+		File file1 = new File("/icon.png", "image/png");
+		file1.setIdShort("file1");
+		File file2 = new File("/aasx/Document/docu.pdf", "application/pdf");
+		file2.setIdShort("file2");
+		
+		SubmodelElementCollection collection = new SubmodelElementCollection("Marking_RCM");
+		collection.addSubModelElement(file1);
+		
+		sm.addSubModelElement(collection);
+		sm.addSubModelElement(file2);
+		aas.addSubModel(sm);
+		
+		aasList.add(aas);
+		submodelList.add(sm);
+		assetList.add(asset);
+
+		// Build InMemoryFiles for .aasx
+		byte[] content1 = {5,6,7,8,9};
+		InMemoryFile file = new InMemoryFile(content1, "/icon.png");
+		fileList.add(file);
+		
+		byte[] content2 = {10,11,12,13,14};
+		file = new InMemoryFile(content2, "aasx/Document/docu.pdf");
+		fileList.add(file);
+		
+		// Build AASX
+		FileOutputStream out = new FileOutputStream(CREATED_AASX_PATH);
+		AASXFactory.buildAASX(aasList, assetList, conceptDescriptionList, submodelList, fileList, out);
+		
+		AASXPackageManager packageManager = new AASXPackageManager(CREATED_AASX_PATH);
+		
+		checkBundle(packageManager.retrieveAASBundles(), aas, sm);
+		
+		// Unzip files from the .aasx
+		packageManager.unzipRelatedFiles();
+		
+		// Check if all expected files are present
+		for(String path: unzipFiles) {
+			assertTrue(new java.io.File(path).exists());
+		}
+		
+	}
+	
+	private void checkBundle(Set<AASBundle> bundles, IAssetAdministrationShell aas, ISubModel sm) {
+		assertEquals(1, bundles.size());
+		AASBundle bundle = bundles.stream().findFirst().get();
+		
+		IAssetAdministrationShell parsedAAS = bundle.getAAS();
+		assertEquals(aas.getIdShort(), parsedAAS.getIdShort());
+		assertEquals(aas.getIdentification().getId(), parsedAAS.getIdentification().getId());
+		
+		assertEquals(1, bundle.getSubmodels().size());
+		ISubModel parsedSubmodel = bundle.getSubmodels().stream().findFirst().get();
+		assertEquals(sm.getIdShort(), parsedSubmodel.getIdShort());
+		assertEquals(sm.getIdentification().getId(), parsedSubmodel.getIdentification().getId());
+		assertEquals(sm.getSubmodelElements().size(), parsedSubmodel.getSubmodelElements().size());
+	}
+	
 
 	/**
 	 * Check the parsed aas with expected ones
@@ -259,5 +364,17 @@
 		assertEquals("Street", prop2.getIdShort());
 		assertEquals("Ruiter Straße 82", prop2.get());
 	}
+	
+	
+	/**
+	 * Delete created files
+	 */
+	@AfterClass
+	public static void cleanUp() {
+		for(String path: unzipFiles) {
+			new java.io.File(path).delete();
+		}
+		new java.io.File(CREATED_AASX_PATH).delete();
+	}
 
 }
diff --git a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxContextConfiguration.java b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxContextConfiguration.java
index 7d0f5f5..46c0325 100644
--- a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxContextConfiguration.java
+++ b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxContextConfiguration.java
@@ -3,6 +3,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
 import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
 
 /**
@@ -17,7 +18,7 @@
 	public static final String ENV_PREFIX = "BaSyxContext_";
 
 	// Default BaSyx Context configuration
-	public static final String DEFAULT_CONTEXTPATH = "/basys.sdk";
+	public static final String DEFAULT_CONTEXTPATH = "basys.sdk";
 	public static final String DEFAULT_DOCBASE = System.getProperty("java.io.tmpdir");
 	public static final String DEFAULT_HOSTNAME = "localhost";
 	public static final int DEFAULT_PORT = 4000;
@@ -107,7 +108,7 @@
 	}
 
 	public void setContextPath(String contextPath) {
-		setProperty(CONTEXTPATH, contextPath);
+		setProperty(CONTEXTPATH, VABPathTools.stripSlashes(contextPath));
 	}
 
 	public String getDocBasePath() {
@@ -135,6 +136,12 @@
 	}
 
 	public String getUrl() {
-		return "http://" + getHostname() + ":" + getPort() + "/" + getContextPath();
+		String contextPath = getContextPath();
+		String base = "http://" + getHostname() + ":" + getPort();
+		if (contextPath.isEmpty()) {
+			return base;
+		} else {
+			return VABPathTools.concatenatePaths(base, contextPath);
+		}
 	}
 }
diff --git a/examples/.mvn/wrapper/MavenWrapperDownloader.java b/examples/.mvn/wrapper/MavenWrapperDownloader.java
new file mode 100644
index 0000000..e76d1f3
--- /dev/null
+++ b/examples/.mvn/wrapper/MavenWrapperDownloader.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+        + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if(mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if(mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if(!outputFile.getParentFile().exists()) {
+            if(!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}
diff --git a/examples/.mvn/wrapper/maven-wrapper.jar b/examples/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 0000000..2cc7d4a
--- /dev/null
+++ b/examples/.mvn/wrapper/maven-wrapper.jar
Binary files differ
diff --git a/examples/.mvn/wrapper/maven-wrapper.properties b/examples/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..642d572
--- /dev/null
+++ b/examples/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
diff --git a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/staticdynamic/StaticDynamicScenario.java b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/staticdynamic/StaticDynamicScenario.java
index b1e858d..0c330b2 100644
--- a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/staticdynamic/StaticDynamicScenario.java
+++ b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/staticdynamic/StaticDynamicScenario.java
@@ -1,13 +1,13 @@
 package org.eclipse.basyx.examples.scenarios.staticdynamic;
 
 import java.io.IOException;
-import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.eclipse.basyx.aas.aggregator.proxy.AASAggregatorProxy;
 import org.eclipse.basyx.aas.registration.proxy.AASRegistryProxy;
 import org.eclipse.basyx.components.IComponent;
@@ -45,11 +45,11 @@
 	
 	
 	
-	public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException, URISyntaxException {
+	public static void main(String[] args) throws InvalidFormatException, IOException, ParserConfigurationException, SAXException {
 		new StaticDynamicScenario();
 	}
 
-	public StaticDynamicScenario() throws IOException, ParserConfigurationException, SAXException, URISyntaxException {
+	public StaticDynamicScenario() throws InvalidFormatException, IOException, ParserConfigurationException, SAXException {
 		
 		// Startup the registry server
 		startRegistry();
diff --git a/examples/basyx.aasWrapper/Dockerfile b/examples/basyx.aasWrapper/Dockerfile
new file mode 100644
index 0000000..5c98c98
--- /dev/null
+++ b/examples/basyx.aasWrapper/Dockerfile
@@ -0,0 +1,23 @@
+# Add java runtime environment for execution
+FROM java:8-jdk-alpine 
+
+# Copy built jar to image using the jar name specified in the pom.xml (JAR_FILE)
+ARG JAR_FILE
+COPY target/${JAR_FILE} /usr/share/basyxExecutable.jar
+COPY target/lib /usr/share/lib
+COPY src/main/resources/context.properties /usr/share/config/context.properties
+COPY src/main/resources/wrapper.properties /usr/share/config/wrapper.properties
+
+# Expose the appropriate port. In case of Tomcat, this is 8080.
+ARG PORT
+EXPOSE ${PORT}
+
+# Set the path for the context configuration file
+ARG CONTEXT_CONFIG_KEY
+ENV ${CONTEXT_CONFIG_KEY} "/usr/share/config/context.properties"
+
+# Set the path for the context configuration file
+ENV BASYX_WRAPPER "/usr/share/config/wrapper.properties"
+ 
+# Start the jar
+CMD java -jar "/usr/share/basyxExecutable.jar"
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/build.bat b/examples/basyx.aasWrapper/build.bat
new file mode 100644
index 0000000..0977f37
--- /dev/null
+++ b/examples/basyx.aasWrapper/build.bat
@@ -0,0 +1 @@
+.././mvnw clean install -U -Pdocker
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/build.sh b/examples/basyx.aasWrapper/build.sh
new file mode 100644
index 0000000..d223f82
--- /dev/null
+++ b/examples/basyx.aasWrapper/build.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+.././mvnw clean install -U -Pdocker -DskipTests
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/docker-compose.yml b/examples/basyx.aasWrapper/docker-compose.yml
new file mode 100644
index 0000000..4240df8
--- /dev/null
+++ b/examples/basyx.aasWrapper/docker-compose.yml
@@ -0,0 +1,23 @@
+version: '3'
+services:
+
+  registry:
+    image: basyx/registry:0.1.0-SNAPSHOT
+    container_name: dashboard-registry
+    ports:
+      - 4000:4000
+
+  dashboard-aas:
+    image: basyx/dashboard-aas:0.1.0-SNAPSHOT
+    container_name: dashboard-aas
+    environment:
+      - BaSyxDashboardSubmodel_Min=15
+#      - BaSyxDashboardSubmodel_Max=30
+    ports:
+      - 6400:6400
+
+  aas-wrapper:
+    image: basyx/aas-wrapper:0.1.0-SNAPSHOT
+    container_name: aas-wrapper
+    ports:
+      - 6500:6500
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/pom.xml b/examples/basyx.aasWrapper/pom.xml
new file mode 100644
index 0000000..fdec27f
--- /dev/null
+++ b/examples/basyx.aasWrapper/pom.xml
@@ -0,0 +1,66 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.basyx</groupId>
+		<artifactId>basyx.components.docker</artifactId>
+		<version>0.1.0-SNAPSHOT</version>
+	</parent>
+	
+	<artifactId>basyx.components.AASWrapper</artifactId>
+	<name>BaSyx AAS Wrapper</name>
+	
+	<properties>
+		<!--  
+			basyx.components.executable is the executable class with the definition of the public void main(String[]).
+			It is needed when building the jar in the maven-jar-plugin (see basyx.components.docker/pom.xml) 
+		-->
+		<basyx.components.executable>org.eclipse.basyx.wrapper.AASWrapperExecutable</basyx.components.executable>
+	</properties>
+	
+	<packaging>jar</packaging>
+	
+	<!-- Define additional plugins that are not included by default -->
+	<!-- Plugin configuration is done in parent project(s) -->
+	<build>
+		<plugins>
+			<!-- Attach sources to jar file -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+	
+	<profiles>
+		<profile>
+			<!-- 
+				"Docker" profile - do not build & install docker images by default
+				Run "mvn install -Pdocker" in order to include docker  
+			-->
+			<id>docker</id>
+			<build>
+				<plugins>
+					<!-- Read maven properties from file -->
+					<plugin>
+						<groupId>org.codehaus.mojo</groupId>
+						<artifactId>properties-maven-plugin</artifactId>
+					</plugin>
+				
+					<!-- Copy the dependencies necessary to run the jar -->
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-dependency-plugin</artifactId>
+					</plugin>
+				
+					<!-- Build the docker image -->
+					<plugin>
+						<groupId>com.spotify</groupId>
+						<artifactId>dockerfile-maven-plugin</artifactId>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+</project>
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/AASWrapperExecutable.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/AASWrapperExecutable.java
new file mode 100644
index 0000000..0d4a049
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/AASWrapperExecutable.java
@@ -0,0 +1,200 @@
+package org.eclipse.basyx.wrapper;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.aas.registration.proxy.AASRegistryProxy;
+import org.eclipse.basyx.components.configuration.BaSyxConfiguration;
+import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer;
+import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
+import org.eclipse.basyx.wrapper.provider.GenericHTTPInterface;
+import org.eclipse.basyx.wrapper.provider.GenericWrapperProvider;
+import org.eclipse.basyx.wrapper.provider.IWrapperProvider;
+import org.eclipse.basyx.wrapper.provider.aas.AASWrapperProvider;
+import org.eclipse.basyx.wrapper.provider.grafana.GrafanaProvider;
+import org.eclipse.basyx.wrapper.provider.streamsheets.StreamsheetsProvider;
+import org.eclipse.basyx.wrapper.receiver.IPropertyWrapperService;
+import org.eclipse.basyx.wrapper.receiver.SeparateAASService;
+import org.eclipse.basyx.wrapper.receiver.configuration.AASPropertyConfiguration;
+import org.eclipse.basyx.wrapper.receiver.configuration.PropertyConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Runs the AAS wrapper for the given configuration. The configuration is loaded
+ * from the wrapper.properties by default, but can also be given by an external file.
+ * For this, the path has to be specified in the BASYX_WRAPPER java property or system
+ * environment variable.
+ * 
+ * @author espen
+ *
+ */
+public class AASWrapperExecutable {
+	private static final Logger logger = LoggerFactory.getLogger(AASWrapperExecutable.class);
+	public static final int PORT = 6500;
+	public static final String HOST = "aas-wrapper";
+
+	private static String registryAddress;
+	private static Map<String, PropertyConfiguration> propertyConfigs;
+	private static Map<String, String> activeProviders = new HashMap<>();
+	private static Map<String, String> providerPaths = new HashMap<>();
+
+	public static void main(String[] args) throws Exception {
+		logger.info("Wrapper started, waiting for other components");
+		// Use docker-compose health check for registry and aas instead
+		Thread.sleep(6000);
+
+		logger.info("Loading configuration...");
+		loadConfigs("wrapper.properties");
+
+		logger.info("Creating proxy for " + propertyConfigs.size() + " properties...");
+		IAASRegistryService registry = new AASRegistryProxy(registryAddress);
+		IPropertyWrapperService connector = new SeparateAASService(registry, propertyConfigs.values());
+
+		logger.info("Creating " + activeProviders.size() + " providers...");
+		List<IWrapperProvider> providers = createProxyProviders();
+		providers.forEach(p -> p.initialize(connector, registry, propertyConfigs.values()));
+
+		if (!providers.isEmpty()) {
+			logger.info("Starting property proxy service...");
+			connector.start();
+			logger.info("Starting proxy providers...");
+			createServlet(providers);
+		} else {
+			logger.info("No providers have been created!");
+		}
+
+		logger.info("Finished");
+	}
+
+	private static List<IWrapperProvider> createProxyProviders() {
+		List<IWrapperProvider> providers = new ArrayList<>();
+		for (Entry<String, String> entry : activeProviders.entrySet()) {
+			String providerId = entry.getKey();
+			String providerType = entry.getValue();
+			IWrapperProvider newProvider;
+			switch (providerType) {
+				case (AASWrapperProvider.TYPE):
+					newProvider = new AASWrapperProvider(HOST, PORT);
+					break;
+				case (GrafanaProvider.TYPE):
+					newProvider = new GrafanaProvider();
+					break;
+				case (StreamsheetsProvider.TYPE):
+					newProvider = new StreamsheetsProvider();
+					break;
+				default:
+					newProvider = new GenericWrapperProvider();
+			}
+			String newPath = providerPaths.get(providerId);
+			if (newPath != null) {
+				newProvider.setProviderPath(newPath);
+			}
+			providers.add(newProvider);
+		}
+		return providers;
+	}
+
+	private static void loadConfigs(String resourceFileName) {
+		// Load resource file
+		logger.info("Loading proxy property file " + resourceFileName);
+		Map<String, String> configMap = new HashMap<>();
+		BaSyxConfiguration config = new BaSyxConfiguration(configMap);
+		config.loadFileOrDefaultResource("BASYX_WRAPPER", "wrapper.properties");
+
+		loadRegistryConfig(config);
+		propertyConfigs = loadPropertyConfigs(configMap);
+		loadProviderConfigs(configMap);
+	}
+
+	private static void loadRegistryConfig(BaSyxConfiguration config) {
+		registryAddress = config.getProperty("registry.endpoint");
+		logger.info("Registry address: " + registryAddress);
+	}
+
+	private static Map<String, PropertyConfiguration> loadPropertyConfigs(Map<String, String> configMap) {
+		Map<String, PropertyConfiguration> configs = new HashMap<>();
+		for (Entry<String, String> entry : configMap.entrySet()) {
+			String key = entry.getKey();
+			String[] propKeys = key.split("\\.");
+			if (propKeys.length != 3 || !propKeys[0].equals(PropertyConfiguration.INDEX)) {
+				continue;
+			}
+
+			String propId = propKeys[1];
+			String parameter = propKeys[2];
+			String value = entry.getValue();
+			if (!configs.containsKey(propId)) {
+				logger.info("Creating property " + propId);
+				PropertyConfiguration propConfig = new PropertyConfiguration();
+				propConfig.setId(propId);
+				configs.put(propId, propConfig);
+			}
+			setPropertyParameter(configs, propId, parameter, value);
+		}
+		return configs;
+	}
+
+	private static void loadProviderConfigs(Map<String, String> configMap) {
+		for (Entry<String, String> entry : configMap.entrySet()) {
+			String key = entry.getKey();
+			String[] propKeys = key.split("\\.");
+			if (propKeys.length != 3 || !propKeys[0].equals(GenericWrapperProvider.INDEX)) {
+				continue;
+			}
+
+			String providerId = propKeys[1];
+			String parameter = propKeys[2];
+			String value = entry.getValue();
+
+			switch (parameter) {
+				case ("type"):
+					activeProviders.put(providerId, value);
+					logger.info("Setting provider '" + providerId + "': type=" + value);
+					break;
+				case ("path"):
+					providerPaths.put(providerId, value);
+					logger.info("Setting provider '" + providerId + "': path=" + value);
+					break;
+				default:
+					logger.info("Invalid config for provider '" + providerId + "': " + parameter + "=" + value);
+			}
+
+		}
+	}
+
+	private static void setPropertyParameter(Map<String, PropertyConfiguration> configs, String propId,
+			String parameter, String value) {
+		logger.info("Setting property '" + propId + "': " + parameter + "=" + value);
+		PropertyConfiguration prop = configs.get(propId);
+		prop.put(parameter, value);
+		if (parameter.equals(PropertyConfiguration.TYPE)) {
+			// Possibility to add more property types
+			switch (value) {
+				case (AASPropertyConfiguration.TYPE):
+					configs.put(propId, new AASPropertyConfiguration(prop));
+					break;
+				default:
+					logger.error("Unknown property type: " + value);
+			}
+		}
+	}
+
+	private static void createServlet(List<IWrapperProvider> providers) {
+		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
+		contextConfig.loadFromDefaultSource();
+		BaSyxContext context = contextConfig.createBaSyxContext();
+		for (IWrapperProvider provider : providers) {
+			context.addServletMapping(provider.getProviderPath() + "/*",
+					new GenericHTTPInterface(provider));
+		}
+        AASHTTPServer server = new AASHTTPServer(context);
+		server.start();
+	}
+}
+
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/exception/WrapperRequestException.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/exception/WrapperRequestException.java
new file mode 100644
index 0000000..136e305
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/exception/WrapperRequestException.java
@@ -0,0 +1,20 @@
+package org.eclipse.basyx.wrapper.exception;
+
+/**
+ * Exception that is thrown when the wrapper cannot request a value from its datasource
+ * 
+ * @author espen
+ *
+ */
+public class WrapperRequestException extends RuntimeException {
+    private static final long serialVersionUID = 1L;
+
+    public WrapperRequestException(String message) {
+        super(message);
+    }
+
+    public WrapperRequestException(String message, Throwable error) {
+        super(message, error);
+    }
+
+}
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/GenericHTTPInterface.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/GenericHTTPInterface.java
new file mode 100644
index 0000000..702c848
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/GenericHTTPInterface.java
@@ -0,0 +1,243 @@
+package org.eclipse.basyx.wrapper.provider;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.StringJoiner;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.basyx.vab.exception.provider.MalformedRequestException;
+import org.eclipse.basyx.vab.exception.provider.ProviderException;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.protocol.http.server.BasysHTTPServlet;
+import org.eclipse.basyx.vab.protocol.http.server.ExceptionToHTTPCodeMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.io.ByteSource;
+
+/**
+ * Implements a generic HTTP interface based on a JSONProvider that implements
+ * GET, PUT, POST, PATCH and DELETE and supports returning objects for each of the
+ * primitive. For PUT, POST and PATCH, it also supports passing objects.
+ * 
+ * @author espen
+ *
+ */
+public class GenericHTTPInterface extends BasysHTTPServlet {
+	private static Logger logger = LoggerFactory.getLogger(GenericHTTPInterface.class);
+	
+	private static final String CHARSET = "UTF-8";
+	private static final String MIMETYPE = "application/json";
+
+	/**
+	 * Version information to identify the version of serialized instances
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private final JSONProvider provider;
+
+	/**
+	 * Constructor
+	 */
+	public GenericHTTPInterface(IWrapperProvider backend) {
+		this.provider = new JSONProvider(backend);
+	}
+
+	/**
+	 * Implement "Get" operation
+	 * 
+	 * Process HTTP get request - get sub model property value
+	 */
+	@Override
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		try {
+			String path = extractPath(req);
+			prepareResponse(resp);
+			provider.processGet(path, resp.getOutputStream());
+		} catch (IOException e) {
+			logger.warn("Exception in HTTP-GET", e);
+		} catch (ProviderException e) {
+			int httpCode = ExceptionToHTTPCodeMapper.mapFromException(e);
+			resp.setStatus(httpCode);
+			logger.debug("Exception in GET request - response-code: " + httpCode, e);
+		}
+	}
+	
+	/**
+	 * Implement "Set" operation
+	 */
+	@Override
+	protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		try {
+			String path = extractPath(req);
+			String serValue = extractSerializedValue(req);
+			prepareResponse(resp);
+			provider.processPut(path, serValue, resp.getOutputStream());
+		} catch (IOException e) {
+			logger.warn("Exception in HTTP-PUT", e);
+		} catch (ProviderException e) {
+			int httpCode = ExceptionToHTTPCodeMapper.mapFromException(e);
+			resp.setStatus(httpCode);
+			logger.debug("Exception in PUT request - response-code: " + httpCode, e);
+		}
+	}
+
+	
+	/**
+	 * <pre>
+	 * Handle HTTP POST operation. Creates a new Property, Operation, Event,
+	 * Submodel or AAS or invokes an operation.
+	 */
+	@Override
+	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		try {
+			String path = extractPath(req);
+			String serValue = extractSerializedValue(req);
+			prepareResponse(resp);
+			provider.processPost(path, serValue, resp.getOutputStream());
+		} catch (IOException e) {
+			logger.warn("Exception in HTTP-POST", e);
+		} catch (ProviderException e) {
+			int httpCode = ExceptionToHTTPCodeMapper.mapFromException(e);
+			resp.setStatus(httpCode);
+			logger.debug("Exception in POST request - response-code: " + httpCode, e);
+		}
+	}
+
+	
+	/**
+	 * Handle a HTTP PATCH operation. Updates a map or collection
+	 * 
+	 */
+	@Override
+	protected void doPatch(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		try {
+			String path = extractPath(req);
+			String serValue = extractSerializedValue(req);
+			prepareResponse(resp);
+			provider.processPatch(path, serValue, resp.getOutputStream());
+		} catch (IOException e) {
+			logger.warn("Exception in HTTP-PATCH", e);
+		} catch (ProviderException e) {
+			int httpCode = ExceptionToHTTPCodeMapper.mapFromException(e);
+			resp.setStatus(httpCode);
+			logger.debug("Exception in PATCH request - response-code: " + httpCode, e);
+		}
+	}
+
+	
+	/**
+	 * Implement "Delete" operation. Deletes any resource under the given path.
+	 */
+	@Override
+	protected void doDelete(HttpServletRequest req, HttpServletResponse resp) {
+		try {
+			String path = extractPath(req);
+			prepareResponse(resp);
+			provider.processDelete(path, resp.getOutputStream());
+		} catch (IOException e) {
+			logger.warn("Exception in HTTP-DELETE", e);
+		} catch (ProviderException e) {
+			int httpCode = ExceptionToHTTPCodeMapper.mapFromException(e);
+			resp.setStatus(httpCode);
+			logger.debug("Exception in DELETE request - response-code: " + httpCode, e);
+		}
+	}
+
+	
+	private String extractPath(HttpServletRequest req) {
+		// Extract path
+		String uri = req.getRequestURI();
+
+		// Normalizes URI
+		String nUri = "/" + VABPathTools.stripSlashes(uri);
+		String contextPath = req.getContextPath();
+		if (nUri.startsWith(contextPath) && nUri.length() > getEnvironmentPathSize(req) - 1) {
+			String path = nUri.substring(getEnvironmentPathSize(req));
+			String extractedParameters = extractParameters(req);
+
+			path = VABPathTools.stripSlashes(path);
+
+			if (extractedParameters.isEmpty()) {
+				path += "/";
+			} else {
+				path += extractedParameters;
+			}
+			return path;
+		}
+		throw new MalformedRequestException("The passed path " + uri + " is not a possbile path for this server.");
+	}
+
+	/**
+	 * Extracts request parameters from the request
+	 * 
+	 * @param req
+	 * @return
+	 */
+	private String extractParameters(HttpServletRequest req) {
+		Enumeration<String> parameterNames = req.getParameterNames();
+		
+		// Collect list of parameters
+		List<String> parameters = new ArrayList<>();
+		while (parameterNames.hasMoreElements()) {
+
+			StringBuilder ret = new StringBuilder();
+			String paramName = parameterNames.nextElement();
+			ret.append(paramName);
+			ret.append("=");
+
+			String[] paramValues = req.getParameterValues(paramName);
+			for (int i = 0; i < paramValues.length; i++) {
+				ret.append(paramValues[i]);
+			}
+			parameters.add(ret.toString());
+
+		}
+
+		// If no parameter is existing, return an empty string. Else join the parameters
+		// and return them prefixed with a ?
+		if (parameters.isEmpty()) {
+			return "";
+		} else {
+			StringJoiner joiner = new StringJoiner("&");
+			parameters.stream().forEach(joiner::add);
+			return "?" + joiner.toString();
+		}
+	}
+
+	private int getEnvironmentPathSize(HttpServletRequest req) {
+		return req.getContextPath().length() + req.getServletPath().length();
+	}
+
+
+	/**
+	 * Read serialized value 
+	 * @param req
+	 * @return
+	 * @throws IOException
+	 */
+	private String extractSerializedValue(HttpServletRequest req) throws IOException {
+		// https://www.baeldung.com/convert-input-stream-to-string#guava
+		ByteSource byteSource = new ByteSource() {
+	        @Override
+	        public InputStream openStream() throws IOException {
+	            return req.getInputStream();
+	        }
+	    };
+	 
+		return byteSource.asCharSource(StandardCharsets.UTF_8).read();
+	}
+
+	private void prepareResponse(HttpServletResponse resp) {
+		resp.setContentType(MIMETYPE);
+		resp.setCharacterEncoding(CHARSET);
+		resp.setStatus(200);
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/GenericWrapperProvider.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/GenericWrapperProvider.java
new file mode 100644
index 0000000..27180b7
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/GenericWrapperProvider.java
@@ -0,0 +1,88 @@
+package org.eclipse.basyx.wrapper.provider;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.vab.exception.provider.MalformedRequestException;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.wrapper.receiver.IPropertyWrapperService;
+import org.eclipse.basyx.wrapper.receiver.configuration.PropertyConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Wraps any connector API with a ModelProvider
+ * 
+ * @author espen
+ *
+ */
+public class GenericWrapperProvider implements IWrapperProvider {
+	public static final String INDEX = "providers";
+	private static final Logger logger = LoggerFactory.getLogger(GenericWrapperProvider.class);
+
+	protected IPropertyWrapperService proxyService;
+	protected String providerPath = "provider";
+	protected Set<String> passiveProperties = new HashSet<>();
+
+	@Override
+	public void initialize(IPropertyWrapperService wrapperService, IAASRegistryService registry,
+			Collection<PropertyConfiguration> configs) {
+		logger.info(
+				"Initializing provider '" + this.getClass().getSimpleName() + "' on path " + this.getProviderPath());
+		this.proxyService = wrapperService;
+		for (PropertyConfiguration config : configs) {
+			if (!config.getActive()) {
+				passiveProperties.add(config.getId());
+			}
+		}
+	}
+
+	@Override
+	public Object get(String path) {
+		path = preparePath(path);
+		if ( passiveProperties.contains(path) ) {
+			proxyService.generatePassiveValue(path);
+		}
+		return proxyService.getPropertyValue(path);
+	}
+
+	@Override
+	public Object post(String path, Object newValue) {
+		path = preparePath(path);
+		proxyService.setPropertyValue(path, newValue);
+		return newValue;
+	}
+
+	protected String preparePath(String path) {
+		VABPathTools.checkPathForNull(path);
+		path = VABPathTools.stripSlashes(path);
+		return path;
+	}
+
+	@Override
+	public String getProviderPath() {
+		return providerPath;
+	}
+
+	@Override
+	public void setProviderPath(String path) {
+		this.providerPath = path;
+	}
+
+	@Override
+	public Object delete(String path) {
+		throw new MalformedRequestException("Deleting elements is not supported");
+	}
+
+	@Override
+	public Object put(String path, Object data) {
+		throw new MalformedRequestException("Setting elements is not supported");
+	}
+
+	@Override
+	public Object patch(String path, Object data) {
+		throw new MalformedRequestException("Patching elements is not supported");
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/HTTPModelProvider.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/HTTPModelProvider.java
new file mode 100644
index 0000000..e50edfe
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/HTTPModelProvider.java
@@ -0,0 +1,19 @@
+package org.eclipse.basyx.wrapper.provider;
+
+/**
+ * A simple, generic HTTP-REST model provider
+ * 
+ * @author espen
+ *
+ */
+public interface HTTPModelProvider {
+	public Object get(String path);
+
+	public Object delete(String path);
+
+	public Object put(String path, Object data);
+
+	public Object post(String path, Object data);
+
+	public Object patch(String path, Object data);
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/IWrapperProvider.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/IWrapperProvider.java
new file mode 100644
index 0000000..d8b62b9
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/IWrapperProvider.java
@@ -0,0 +1,39 @@
+package org.eclipse.basyx.wrapper.provider;
+
+import java.util.Collection;
+
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.wrapper.receiver.IPropertyWrapperService;
+import org.eclipse.basyx.wrapper.receiver.configuration.PropertyConfiguration;
+
+/**
+ * Interface for a generic connector that makes use of the HTTPModelProvider interface
+ * 
+ * @author espen
+ *
+ */
+public interface IWrapperProvider extends HTTPModelProvider {
+
+	/**
+	 * Returns the path for this provider
+	 * 
+	 * @return
+	 */
+	public String getProviderPath();
+
+	/**
+	 * Sets the path for this provider
+	 * 
+	 * @param path
+	 */
+	public void setProviderPath(String path);
+
+	/**
+	 * Initialize the provider
+	 * 
+	 * @param proxyService
+	 * @param registry
+	 */
+	public void initialize(IPropertyWrapperService proxyService, IAASRegistryService registry,
+			Collection<PropertyConfiguration> configs);
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/JSONProvider.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/JSONProvider.java
new file mode 100644
index 0000000..e63e888
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/JSONProvider.java
@@ -0,0 +1,166 @@
+package org.eclipse.basyx.wrapper.provider;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+
+import org.eclipse.basyx.vab.coder.json.metaprotocol.Result;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
+import org.eclipse.basyx.vab.exception.provider.MalformedRequestException;
+import org.eclipse.basyx.vab.exception.provider.ProviderException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Implementation variant of the JSONProvider for a generic HTTPModelProvider backend
+ * 
+ * @author espen
+ *
+ */
+public class JSONProvider {
+	
+	private static Logger logger = LoggerFactory.getLogger(JSONProvider.class);
+
+	/**
+	 * Reference to serializer / deserializer
+	 */
+	protected GSONTools serializer = null;
+
+	private HTTPModelProvider backend;
+	
+	/**
+	 * Constructor
+	 */
+	public JSONProvider(HTTPModelProvider backend) {
+		this.backend = backend;
+		serializer = new GSONTools(new DefaultTypeFactory());
+	}
+
+	/**
+	 * Marks success as false and delivers exception cause messages 
+	 * @param e
+	 * @return
+	 */
+	private String serialize(Exception e) {
+		// Create Ack
+		Result result = new Result(e);
+		
+		// Serialize the whole thing
+		return serialize(result);
+	}
+	
+	
+	/**
+	 * Serialize IResult (HashMap)
+	 * @param string
+	 * @return
+	 */
+	private String serialize(Result string) {
+		// Serialize the whole thing
+		return serializer.serialize(string);
+	}
+	
+
+	/**
+	 * Send Error
+	 * @param e
+	 * @param path
+	 * @param resp
+	 */
+	private void sendException(OutputStream resp, Exception e) {
+		
+		// Serialize Exception
+		String jsonString = serialize(e);
+		try {
+			resp.write(jsonString.getBytes(StandardCharsets.UTF_8));
+		} catch(IOException innerE) {
+			throw new ProviderException("Failed to send Exception '" + e.getMessage() + "' to client", innerE);
+		}
+		
+		//If the Exception is a ProviderException, just rethrow it
+		if(e instanceof ProviderException) {
+			throw (ProviderException) e;
+		}
+		
+		//If the Exception is not a ProviderException encapsulate it in one and log it
+		logger.error("Unknown Exception in JSONProvider", e);
+		throw new ProviderException(e);
+	}
+
+	
+	/**
+	 * Extracts parameter from JSON and handles de-serialization errors
+	 */
+	private Object extractParameter(String serializedJSONValue) {
+		// Return value
+		Object result = null;
+		try {
+			// Deserialize json body
+			result = serializer.deserialize(serializedJSONValue);
+		} catch (Exception e) {
+			//JSON could not be deserialized
+			throw new MalformedRequestException(e);
+		}
+		
+		return result;
+	}
+	
+
+	public void processGet(String path, OutputStream outputStream) {
+		try {
+			logger.info("GET '" + path + "'");
+			Object value = backend.get(path);
+			String jsonString = serializer.serialize(value);
+			outputStream.write(jsonString.getBytes(StandardCharsets.UTF_8));
+		} catch (Exception e) {
+			sendException(outputStream, e);
+		}
+	}
+
+	public void processDelete(String path, OutputStream outputStream) {
+		try {
+			logger.info("DELETE '" + path + "'");
+			Object value = backend.delete(path);
+			String jsonString = serializer.serialize(value);
+			outputStream.write(jsonString.getBytes(StandardCharsets.UTF_8));
+		} catch (Exception e) {
+			sendException(outputStream, e);
+		}
+	}
+
+	public void processPost(String path, String serializedJSONValue, OutputStream outputStream) {
+		try {
+			Object parameter = extractParameter(serializedJSONValue);
+			Object value = backend.post(path, parameter);
+			String jsonString = serializer.serialize(value);
+			outputStream.write(jsonString.getBytes(StandardCharsets.UTF_8));
+		} catch (Exception e) {
+			sendException(outputStream, e);
+		}
+	}
+
+	public void processPatch(String path, String serializedJSONValue, OutputStream outputStream) {
+		try {
+			logger.info("PATCH " + path + "'");
+			Object parameter = extractParameter(serializedJSONValue);
+			Object value = backend.patch(path, parameter);
+			String jsonString = serializer.serialize(value);
+			outputStream.write(jsonString.getBytes(StandardCharsets.UTF_8));
+		} catch (Exception e) {
+			sendException(outputStream, e);
+		}
+	}
+
+	public void processPut(String path, String serializedJSONValue, OutputStream outputStream) {
+		try {
+			logger.info("PUT " + path + "'");
+			Object parameter = extractParameter(serializedJSONValue);
+			Object value = backend.put(path, parameter);
+			String jsonString = serializer.serialize(value);
+			outputStream.write(jsonString.getBytes(StandardCharsets.UTF_8));
+		} catch (Exception e) {
+			sendException(outputStream, e);
+		}
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/AASWrapperProvider.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/AASWrapperProvider.java
new file mode 100644
index 0000000..7d0c473
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/AASWrapperProvider.java
@@ -0,0 +1,138 @@
+package org.eclipse.basyx.wrapper.provider.aas;
+
+import java.util.Collection;
+
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.aas.restapi.AASModelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.vab.exception.provider.MalformedRequestException;
+import org.eclipse.basyx.wrapper.provider.IWrapperProvider;
+import org.eclipse.basyx.wrapper.receiver.IPropertyWrapperService;
+import org.eclipse.basyx.wrapper.receiver.configuration.PropertyConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * AAS Provider for the wrapper that exposes the GET-Part of the AAS interface
+ * 
+ * @author espen
+ *
+ */
+public class AASWrapperProvider implements IWrapperProvider {
+	private static final Logger logger = LoggerFactory.getLogger(AASWrapperProvider.class);
+	public static final String TYPE = "AAS";
+	
+	private final String host;
+	private final int port;
+
+	private VABMultiSubmodelProvider provider;
+
+	private String providerPath = "/aas";
+
+	/**
+	 * Standard constructor for the AASWrapperProvider. Needs to know the wrapper endpoint to be able to register the
+	 * created AAS interface
+	 * 
+	 * @param host Host of the wrapper
+	 * @param port Port for the wrapper
+	 */
+	public AASWrapperProvider(String host, int port) {
+		this.host = host;
+		this.port = port;
+	}
+
+	@Override
+	public void initialize(IPropertyWrapperService wrapperService, IAASRegistryService registry,
+			Collection<PropertyConfiguration> configs) {
+		logger.info("Initializing provider '" + this.getClass().getSimpleName() + "' on path " + this.getProviderPath());
+
+		// Create the VABMultiSubmodelProvider
+		AssetAdministrationShell aas = new WrapperAssetAdministrationShell();
+		Asset asset = new WrapperAsset();
+		aas.setAsset(asset);
+		SubModel sm = new WrapperSubmodel("Wrapper", new Identifier(IdentifierType.CUSTOM, "WrapperSubmodel"),
+				wrapperService,
+				configs);
+		aas.addSubModel(sm);
+
+		provider = new VABMultiSubmodelProvider(new AASModelProvider(aas));
+		provider.addSubmodel(new SubModelProvider(sm));
+
+		// Register the aas
+		AASDescriptor desc = createDescriptor(aas, sm);
+		registerAAS(registry, desc);
+	}
+
+	private AASDescriptor createDescriptor(AssetAdministrationShell aas, SubModel... submodels) {
+		AASDescriptor descriptor = new AASDescriptor(aas, "http://" + host + ":" + port + "/aas");
+		for (SubModel sm : submodels) {
+			descriptor.addSubmodelDescriptor(
+					new SubmodelDescriptor(sm,
+							"http://" + host + ":" + port + "/aas/submodels/" + sm.getIdShort() + "/"));
+		}
+		return descriptor;
+	}
+
+	private static void registerAAS(IAASRegistryService registry, AASDescriptor descriptor) {
+		// Quick & dirty, try to register until registry is up
+		for (int i = 0; i < 10; i++) {
+			try {
+				registry.register(descriptor);
+				break;
+			} catch (Exception e) {
+				try {
+					Thread.sleep(2000);
+				} catch (InterruptedException e1) {
+					logger.warn("Interrupted", e1);
+					Thread.currentThread().interrupt();
+				}
+			}
+		}
+	}
+
+	@Override
+	public String getProviderPath() {
+		return providerPath;
+	}
+
+	@Override
+	public void setProviderPath(String path) {
+		this.providerPath = path;
+	}
+
+	@Override
+	public Object post(String path, Object data) {
+		throw new MalformedRequestException("Creating elements is not supported");
+	}
+
+	/**
+	 * Only expose the get-Part of the HTTP-REST Interface of the AAS
+	 */
+	@Override
+	public Object get(String path) {
+		return provider.getModelPropertyValue(path);
+	}
+
+	@Override
+	public Object delete(String path) {
+		throw new MalformedRequestException("Deleting elements is not supported");
+	}
+
+	@Override
+	public Object put(String path, Object data) {
+		throw new MalformedRequestException("Setting elements is not supported");
+	}
+
+	@Override
+	public Object patch(String path, Object data) {
+		throw new MalformedRequestException("Patching elements is not supported");
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/WrapperAsset.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/WrapperAsset.java
new file mode 100644
index 0000000..bd4b86d
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/WrapperAsset.java
@@ -0,0 +1,19 @@
+package org.eclipse.basyx.wrapper.provider.aas;
+
+import org.eclipse.basyx.aas.metamodel.api.parts.asset.AssetKind;
+import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+
+/**
+ * Dummy asset for the wrapper AAS interface
+ * 
+ * @author espen
+ *
+ */
+public class WrapperAsset extends Asset {
+	public WrapperAsset() {
+		setIdShort("WrapperAsset");
+		setIdentification(IdentifierType.CUSTOM, "WrapperAsset");
+		setAssetKind(AssetKind.INSTANCE);
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/WrapperAssetAdministrationShell.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/WrapperAssetAdministrationShell.java
new file mode 100644
index 0000000..c9a473a
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/WrapperAssetAdministrationShell.java
@@ -0,0 +1,17 @@
+package org.eclipse.basyx.wrapper.provider.aas;
+
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+
+/**
+ * Dummy AAS for the wrapper AAS interface
+ * 
+ * @author espen
+ *
+ */
+public class WrapperAssetAdministrationShell extends AssetAdministrationShell {
+	public WrapperAssetAdministrationShell() {
+		setIdShort("WrapperAAS");
+		setIdentification(IdentifierType.CUSTOM, "WrapperAAS");
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/WrapperSubmodel.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/WrapperSubmodel.java
new file mode 100644
index 0000000..cce4e44
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/aas/WrapperSubmodel.java
@@ -0,0 +1,113 @@
+package org.eclipse.basyx.wrapper.provider.aas;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.wrapper.receiver.IPropertyWrapperService;
+import org.eclipse.basyx.wrapper.receiver.PropertyResult;
+import org.eclipse.basyx.wrapper.receiver.configuration.PropertyConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A submodel for wrapping the data
+ * 
+ * @author espen
+ *
+ */
+public class WrapperSubmodel extends SubModel {
+	private static final Logger logger = LoggerFactory.getLogger(WrapperSubmodel.class);
+
+	protected Map<String, SubmodelElementCollection> collections = new HashMap<>();
+	private IPropertyWrapperService proxyService;
+
+	public WrapperSubmodel(String idShort, IIdentifier id, IPropertyWrapperService connector,
+			Collection<PropertyConfiguration> config) {
+		super();
+		setIdShort(idShort);
+		setIdentification(id.getIdType(), id.getId());
+		setSemanticId(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, true, "0112/2///61360_4#AAF891#001", KeyType.IRDI)));
+
+		proxyService = connector;
+		proxyService.addProxyListener((String propId, PropertyResult result) -> {
+			SubmodelElementCollection coll = collections.get(propId);
+			if (coll != null) {
+				Collection<ISubmodelElement> smElements = generateSubmodelElements(propId, result);
+				coll.setValue(smElements);
+			} else {
+				logger.error("Invalid property '" + propId + "' has been updated");
+			}
+		});
+		initialize(config, connector);
+	}
+
+	private void initialize(Collection<PropertyConfiguration> configs, IPropertyWrapperService connector) {
+		for ( PropertyConfiguration config : configs ) {
+			String propId = config.getId();
+			if ( config.getActive() ) {
+				setActiveProperty(propId);
+			} else {
+				setPassiveProperty(propId);		
+			}
+		}
+	}
+
+	private Collection<ISubmodelElement> generateSubmodelElements(String idShort, PropertyResult result) {
+		Collection<ISubmodelElement> elements = new ArrayList<>();
+		List<Object> data = result.getData();
+		List<String> dates = result.getTimestamps();
+		for (int i = data.size() - 1; i >= 0; i--) {
+			Property dateProp = new Property();
+			dateProp.setIdShort("time" + i);
+			dateProp.set(dates.get(i).toString());
+			elements.add(dateProp);
+			Property valueProp = new Property();
+			valueProp.setIdShort("value" + i);
+			valueProp.set(data.get(i));
+			elements.add(valueProp);
+		}
+		Operation setOperation = new Operation();
+		setOperation.setIdShort("set" + idShort);
+		Function<Object[], Object> fillInvokable = (params) -> {
+			// not supported, yet
+			return params;
+		};
+		setOperation.setInvocable(fillInvokable);
+		elements.add(setOperation);
+		return elements;
+	}
+
+	private void setActiveProperty(String propId) {
+		SubmodelElementCollection coll = new SubmodelElementCollection();
+		coll.setIdShort(propId);
+		collections.put(propId, coll);
+		addSubModelElement(coll);
+	}
+
+	private void setPassiveProperty(final String propId) {
+		SubmodelElementCollection coll = new SubmodelElementCollection();
+		coll.setIdShort(propId);
+		collections.put(propId, new SubmodelElementCollection());
+		addSubModelElement(coll);
+
+		coll.put(Property.VALUE, VABLambdaProviderHelper.createSimple(() -> {
+			proxyService.generatePassiveValue(propId);
+			return collections.get(propId).getValue();
+		}, null));
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/grafana/GrafanaProvider.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/grafana/GrafanaProvider.java
new file mode 100644
index 0000000..d2c0766
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/grafana/GrafanaProvider.java
@@ -0,0 +1,62 @@
+package org.eclipse.basyx.wrapper.provider.grafana;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.basyx.wrapper.provider.GenericWrapperProvider;
+import org.eclipse.basyx.wrapper.receiver.PropertyResult;
+
+/**
+ * Grafana-specific proxy provider. Is based on a SimpleJson interface for grafana
+ * 
+ * @author espen
+ */
+public class GrafanaProvider extends GenericWrapperProvider {
+	public static final String TYPE = "GRAFANA";
+
+	public GrafanaProvider() {
+		this.providerPath = "/grafana";
+	}
+
+	@Override
+	public Object get(String path) {
+		return true;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object post(String path, Object value) {
+		path = preparePath(path);
+
+		String idShort = null;
+		if (path.equals("search")) {
+			Map<String, Object> request = (Map<String, Object>) value;
+			idShort = (String) request.get("target");
+			Set<String> results = getSearchResults(idShort);
+			return results;
+		} else if (path.equals("query")) {
+			Map<String, Object> request = (Map<String, Object>) value;
+			List<Object> targets = (List<Object>) request.get("targets");
+			Map<String, Object> targetMap = (Map<String, Object>) targets.get(0);
+			idShort = (String) targetMap.get("target");
+		}
+
+		if (idShort == null || idShort.isEmpty()) {
+			return false;
+		}
+
+		PropertyResult result = (PropertyResult) super.get(idShort);
+		GrafanaTimeseries response = new GrafanaTimeseries();
+		response.addTarget(idShort, result);
+		return response;
+	}
+
+	private Set<String> getSearchResults(String term) {
+		Set<String> validProperties = proxyService.getValidProperties();
+		return validProperties.stream()
+				.filter(s -> s.toLowerCase().contains(term.toLowerCase()))
+				.collect(Collectors.toSet());
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/grafana/GrafanaTimeseries.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/grafana/GrafanaTimeseries.java
new file mode 100644
index 0000000..c2c27f4
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/grafana/GrafanaTimeseries.java
@@ -0,0 +1,48 @@
+package org.eclipse.basyx.wrapper.provider.grafana;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.wrapper.receiver.PropertyResult;
+
+/**
+ * Conversion class for Grafana timeseries response
+ * 
+ * @author espen
+ *
+ */
+public class GrafanaTimeseries extends ArrayList<Object> {
+	private static final long serialVersionUID = 1L;
+	public GrafanaTimeseries() {
+		super();
+	}
+
+	public void addTarget(String idShort, PropertyResult result) {
+		Map<String, Object> targetData = new HashMap<>();
+		
+		List<Object> values = result.getData();
+		List<String> timestamps = result.getTimestamps();
+		List<List<Object>> dataPoints = new ArrayList<>(values.size());
+		for ( int i = 0; i < values.size(); i++ ) {
+			List<Object> entry = new ArrayList<>(2);
+			entry.add(values.get(i));
+			try {
+				Date date = PropertyResult.DATE_FORMAT.parse(timestamps.get(i));
+				long ms = date.getTime();
+				entry.add(ms);
+			} catch (ParseException e) {
+				e.printStackTrace();
+				break;
+			}
+			// entry.add(Integer.parseInt(timestamps.get(i))); // add string formatted timestamp
+			dataPoints.add(entry);
+		}
+		targetData.put("target", idShort);
+		targetData.put("datapoints", dataPoints);
+		this.add(targetData);
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/streamsheets/StreamsheetsProvider.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/streamsheets/StreamsheetsProvider.java
new file mode 100644
index 0000000..481f110
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/provider/streamsheets/StreamsheetsProvider.java
@@ -0,0 +1,16 @@
+package org.eclipse.basyx.wrapper.provider.streamsheets;
+
+import org.eclipse.basyx.wrapper.provider.GenericWrapperProvider;
+
+/**
+ * Streamsheets-specific proxy provider
+ * 
+ * @author espen
+ */
+public class StreamsheetsProvider extends GenericWrapperProvider {
+	public static final String TYPE = "STREAMSHEETS";
+
+	public StreamsheetsProvider() {
+		this.providerPath = "/streamsheets";
+	}
+}
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/DataPoint.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/DataPoint.java
new file mode 100644
index 0000000..d330116
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/DataPoint.java
@@ -0,0 +1,40 @@
+package org.eclipse.basyx.wrapper.receiver;
+
+import java.util.Date;
+
+/**
+ * Represents a single datapoint for a property
+ * 
+ * @author espen
+ *
+ */
+public class DataPoint {
+    private Date timestamp;
+    private Object value;
+
+	public DataPoint(Object value) {
+		this.timestamp = new Date();
+		this.value = value;
+	}
+
+    public DataPoint(Date timestamp, Object value) {
+        this.timestamp = timestamp;
+        this.value = value;
+    }
+
+    public Date getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(Date timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+}
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/IPropertyEndpoint.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/IPropertyEndpoint.java
new file mode 100644
index 0000000..2dcf78d
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/IPropertyEndpoint.java
@@ -0,0 +1,13 @@
+package org.eclipse.basyx.wrapper.receiver;
+
+/**
+ * Represents a single property endpoint
+ * 
+ * @author espen
+ *
+ */
+public interface IPropertyEndpoint {
+	public DataPoint retrieveValue();
+
+	public void setValue(Object newValue);
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/IPropertyWrapperService.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/IPropertyWrapperService.java
new file mode 100644
index 0000000..1ffdc33
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/IPropertyWrapperService.java
@@ -0,0 +1,61 @@
+package org.eclipse.basyx.wrapper.receiver;
+
+import java.util.Set;
+
+import org.eclipse.basyx.wrapper.receiver.configuration.PropertyConfiguration;
+
+/**
+ * Interface for a property service to get and set properties
+ * 
+ * @author espen
+ *
+ */
+public interface IPropertyWrapperService {
+	/**
+	 * Adds a property configuration to the service
+	 * 
+	 * @param config
+	 */
+	public void addPropertyConfig(PropertyConfiguration config);
+
+	/**
+	 * Returns a list of valid properties that have been configured
+	 */
+	public Set<String> getValidProperties();
+
+	/**
+	 * Gets the current result for a property
+	 * 
+	 * @param propId
+	 * @return
+	 */
+	public PropertyResult getPropertyValue(String propId);
+
+	/**
+	 * Explicitely generates a new value for a passive property.
+	 * 
+	 * @param propId
+	 * @return
+	 */
+	public void generatePassiveValue(String propId);
+
+	/**
+	 * Sets a remote data point to a new value
+	 * 
+	 * @param propId
+	 * @param newValue
+	 */
+	public void setPropertyValue(String propId, Object newValue);
+
+	public void addProxyListener(IWrapperListener listener);
+
+	/**
+	 * Start collecting data for all active properties
+	 */
+	public void start();
+
+	/**
+	 * Stop collecting data for all active properties
+	 */
+	public void stop();
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/IWrapperListener.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/IWrapperListener.java
new file mode 100644
index 0000000..e79886f
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/IWrapperListener.java
@@ -0,0 +1,16 @@
+package org.eclipse.basyx.wrapper.receiver;
+
+/**
+ * A listener for values that have been generated by the wrapper
+ * 
+ * @author espen
+ *
+ */
+public interface IWrapperListener {
+	/**
+	 * Informs the listener about a new value that has been generated
+	 * 
+	 * @param result
+	 */
+	public void newValue(String propId, PropertyResult result);
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/PropertyResult.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/PropertyResult.java
new file mode 100644
index 0000000..118a07d
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/PropertyResult.java
@@ -0,0 +1,79 @@
+package org.eclipse.basyx.wrapper.receiver;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Represents a property result with multiple datapoints
+ * 
+ * @author espen
+ *
+ */
+public class PropertyResult extends HashMap<String, Object> {
+	private static final long serialVersionUID = 1L;
+	public static final String CONTENT = "content";
+	public static final String DATES = "timestamp";
+	public static final String TITLE = "title";
+	public static final String SUCCESS = "success";
+
+	protected int maxValues = 10;
+	protected List<Object> content = new ArrayList<>();
+	// VAB can't serialize dates, yet
+	protected List<String> timestamp = new ArrayList<>();
+
+	public static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+
+	public PropertyResult(String title, int maxValues) {
+		this.maxValues = maxValues;
+		put(CONTENT, content);
+		put(DATES, timestamp);
+		put(SUCCESS, true);
+		put(TITLE, "Value of property '" + title + "'");
+	}
+
+	public PropertyResult(PropertyResult clone) {
+		this.maxValues = clone.maxValues;
+		content = new ArrayList<>(clone.getData());
+		timestamp = new ArrayList<>(clone.getTimestamps());
+		put(CONTENT, content);
+		put(DATES, timestamp);
+		put(SUCCESS, clone.getSuccess());
+		put(TITLE, "Value of property '" + clone.getTitle() + "'");
+	}
+
+	public void setSuccess(boolean success) {
+		put(SUCCESS, success);
+	}
+
+	public boolean getSuccess() {
+		return (boolean) get(SUCCESS);
+	}
+
+	public void setTitle(String title) {
+		put(TITLE, title);
+	}
+
+	public String getTitle() {
+		return (String) get(TITLE);
+	}
+
+	public List<Object> getData() {
+		return content;
+	}
+
+	public List<String> getTimestamps() {
+		return timestamp;
+	}
+
+	public synchronized void addDataPoint(DataPoint value) {
+		content.add(value.getValue());
+		timestamp.add(DATE_FORMAT.format(value.getTimestamp()));
+		while (content.size() > maxValues) {
+			content.remove(0);
+			timestamp.remove(0);
+		}
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/SeparateAASService.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/SeparateAASService.java
new file mode 100644
index 0000000..8c9de7b
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/SeparateAASService.java
@@ -0,0 +1,214 @@
+package org.eclipse.basyx.wrapper.receiver;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.dataelement.ConnectedProperty;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.restapi.MultiSubmodelElementProvider;
+import org.eclipse.basyx.vab.factory.java.ModelProxyFactory;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
+import org.eclipse.basyx.wrapper.exception.WrapperRequestException;
+import org.eclipse.basyx.wrapper.receiver.configuration.AASPropertyConfiguration;
+import org.eclipse.basyx.wrapper.receiver.configuration.PropertyConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Wrapper service for seperately querying the configured properties.
+ * 
+ * @author espen
+ *
+ */
+public class SeparateAASService implements IPropertyWrapperService {
+	private static final Logger logger = LoggerFactory.getLogger(SeparateAASService.class);
+
+	// Registry
+	protected IAASRegistryService registry;
+
+	// Property configurations
+	protected Map<String, String> aasIds = new HashMap<>();
+	protected Map<String, String> submodelIds = new HashMap<>();
+	protected Map<String, String> shortIds = new HashMap<>();
+	protected Map<String, Integer> maxValues = new HashMap<>();
+	protected Set<String> activeProperties = new HashSet<>();
+
+	// Current data
+	protected Map<String, PropertyResult> propertyResults = new HashMap<>();
+
+	// Additional
+	protected Map<String, String> submodelCachedEndpoints = new HashMap<>();
+	protected Map<String, Thread> threads = new HashMap<>();
+	protected List<IWrapperListener> listeners = new ArrayList<>();
+
+	public SeparateAASService(IAASRegistryService registry, Collection<PropertyConfiguration> configs) {
+		this.registry = registry;
+		configs.forEach(this::addPropertyConfig);
+	}
+
+	@Override
+	public void addPropertyConfig(PropertyConfiguration config) {
+		if (config instanceof AASPropertyConfiguration) {
+			AASPropertyConfiguration aasConfig = (AASPropertyConfiguration) config;
+
+			String propId = config.getId();
+			logger.info("Initialize " + propId);
+			aasIds.put(propId, aasConfig.getAAS());
+			submodelIds.put(propId, aasConfig.getSubmodel());
+			shortIds.put(propId, aasConfig.getShortId());
+			propertyResults.put(propId, new PropertyResult(propId, config.getMaxValues()));
+			if (config.getActive()) {
+				activeProperties.add(propId);
+				int interval = config.getInterval(); // => in ms
+				threads.put(propId, createPropertyThread(propId, interval));
+			}
+		}
+	}
+
+	private AASDescriptor getAASDescriptorFromRegistry(String aasId) {
+		// Assume custom AAS identifier => aas identifier type doesn't really matter for lookup
+		IIdentifier aasIdentifier = new Identifier(IdentifierType.CUSTOM, aasId);
+		return registry.lookupAAS(aasIdentifier);
+	}
+
+	private String getSubmodelEndpoint(String aasId, String submodelId) {
+		String aasSmId = aasId + "::" + submodelId;
+		String smEndpoint = submodelCachedEndpoints.get(aasSmId);
+
+		if (smEndpoint == null) {
+			// Retrieve AAS descriptor from the registry to parse the submodel endpoint
+			try {
+				AASDescriptor aasDescriptor = getAASDescriptorFromRegistry(aasId);
+				SubmodelDescriptor smDescriptor = aasDescriptor.getSubmodelDescriptorFromIdShort(submodelId);
+
+				if (smDescriptor == null) {
+					throw new WrapperRequestException("Could not look up descriptor for SubModel '" + submodelId
+							+ "' since it does not exist in AAS '" + aasId + "'");
+				}
+
+				smEndpoint = smDescriptor.getFirstEndpoint();
+
+				// Cache retrieved submodel endpoints
+				submodelCachedEndpoints.put(aasSmId, smEndpoint);
+			} catch (Exception e) {
+				throw new WrapperRequestException("Could not look up descriptor for AAS '" + aasId
+						+ "' since it does not exist or is not available");
+			}
+		}
+
+		return smEndpoint;
+	}
+
+	private IProperty getConnectedProperty(String smEndpoint, String shortId) {
+		// Build the property address from that (and assume it's there)
+		String propEndpoint = VABPathTools.concatenatePaths(smEndpoint, MultiSubmodelElementProvider.ELEMENTS, shortId);
+
+		// Create a "ConnectedProperty" that gives access to the property
+		ModelProxyFactory mpf = new ModelProxyFactory(new HTTPConnectorProvider());
+		return new ConnectedProperty(mpf.createProxy(propEndpoint));
+	}
+
+	private Object getSinglePropertyValue(String propId) {
+		try {
+			String aasId = aasIds.get(propId);
+			String submodelId = submodelIds.get(propId);
+			String shortId = shortIds.get(propId);
+			String smEndpoint = getSubmodelEndpoint(aasId, submodelId);
+			IProperty property = getConnectedProperty(smEndpoint, shortId);
+			return property.getValue();
+		} catch (Exception e) {
+			throw new WrapperRequestException(e.getLocalizedMessage(), e);
+		}
+	}
+
+	@Override
+	public PropertyResult getPropertyValue(String propId) {
+		// Clone a result to prevent changes in the returned value
+		return new PropertyResult(propertyResults.get(propId));
+	}
+
+	@Override
+	public void setPropertyValue(String propId, Object newValue) {
+		try {
+			String aasId = aasIds.get(propId);
+			String submodelId = submodelIds.get(propId);
+			String shortId = shortIds.get(propId);
+			String smEndpoint = getSubmodelEndpoint(aasId, submodelId);
+			IProperty property = getConnectedProperty(smEndpoint, shortId);
+			property.setValue(newValue);
+		} catch (Exception e) {
+			throw new WrapperRequestException(e.getLocalizedMessage(), e);
+		}
+	}
+
+	@Override
+	public void generatePassiveValue(String propId) {
+		if (activeProperties.contains(propId)) {
+			throw new WrapperRequestException("Property with id '" + propId + "' is active");
+		}
+		retrieveValue(propId);
+	}
+
+	private Thread createPropertyThread(final String propId, final int intervalTime) {
+		return new Thread(() -> {
+			Thread thisThread = Thread.currentThread();
+			while (thisThread == threads.get(propId)) {
+				retrieveValue(propId);
+				try {
+					Thread.sleep(intervalTime);
+				} catch (InterruptedException e) {
+				}
+			}
+		});
+	}
+
+	private void retrieveValue(String propId) {
+		PropertyResult values = propertyResults.get(propId);
+		if (values == null) {
+			throw new WrapperRequestException("Property with id '" + propId + "' does not exist");
+		}
+		Object newValue = getSinglePropertyValue(propId);
+		DataPoint dataPoint = new DataPoint(newValue);
+		values.addDataPoint(dataPoint);
+
+		// inform listeners
+		for (IWrapperListener listener : listeners) {
+			listener.newValue(propId, new PropertyResult(values));
+		}
+	}
+
+	@Override
+	public void start() {
+		logger.info("Starting " + threads.size() + " threads");
+		for (Thread t : threads.values()) {
+			t.start();
+		}
+	}
+
+	@Override
+	public void stop() {
+		threads.clear();
+	}
+
+	@Override
+	public void addProxyListener(IWrapperListener listener) {
+		this.listeners.add(listener);
+	}
+
+	@Override
+	public Set<String> getValidProperties() {
+		return propertyResults.keySet();
+	}
+}
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/configuration/AASPropertyConfiguration.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/configuration/AASPropertyConfiguration.java
new file mode 100644
index 0000000..1871944
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/configuration/AASPropertyConfiguration.java
@@ -0,0 +1,51 @@
+package org.eclipse.basyx.wrapper.receiver.configuration;
+
+/**
+ * Represents a single configuration for a property. The datasource for this
+ * property is an AAS property.
+ * 
+ * @author espen
+ *
+ */
+public class AASPropertyConfiguration extends PropertyConfiguration {
+	private static final long serialVersionUID = 1L;
+
+	public static final String TYPE = "AAS";
+
+	// indices in the configuration file
+	public static final String AAS = "aas";
+	public static final String SUBMODEL = "submodel";
+	public static final String SHORTID = "shortId";
+
+	public AASPropertyConfiguration() {
+		super();
+	}
+
+	public AASPropertyConfiguration(PropertyConfiguration config) {
+		putAll(config);
+	}
+
+	public String getAAS() {
+		return get(AAS);
+	}
+
+	public void setAAS(String aas) {
+		put(AAS, aas);
+	}
+
+	public String getSubmodel() {
+		return get(SUBMODEL);
+	}
+
+	public void setSubmodel(String submodel) {
+		put(SUBMODEL, submodel);
+	}
+
+	public String getShortId() {
+		return get(SHORTID);
+	}
+
+	public void setShortId(String shortId) {
+		put(SHORTID, shortId);
+	}
+}
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/configuration/PropertyConfiguration.java b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/configuration/PropertyConfiguration.java
new file mode 100644
index 0000000..1157229
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/java/org/eclipse/basyx/wrapper/receiver/configuration/PropertyConfiguration.java
@@ -0,0 +1,84 @@
+package org.eclipse.basyx.wrapper.receiver.configuration;
+
+import java.util.HashMap;
+import java.util.StringJoiner;
+
+/**
+ * Represents a single configuration for a proxy property. 
+ * 
+ * @author espen
+ *
+ */
+public class PropertyConfiguration extends HashMap<String, String> {
+	private static final long serialVersionUID = 1L;
+
+	// configuration indices
+	public static final String INDEX = "properties";
+	public static final String ID = "id";
+	public static final String TYPE = "type";
+	public static final String ACTIVE = "active";
+	public static final String INTERVAL = "interval";
+	public static final String MAX_VALUES = "maxValues";
+
+	public boolean getActive() {
+		return "true".equals(get(ACTIVE));
+	}
+
+	public void setActive(Boolean active) {
+		put(ACTIVE, active.toString());
+	}
+
+	/**
+	 * Get active update interval in ms
+	 * 
+	 * @return
+	 */
+	public int getInterval() {
+		if (get(INTERVAL) != null) {
+			return Integer.parseInt(get(INTERVAL));
+		} else {
+			return 0;
+		}
+	}
+
+	public void setInterval(int interval) {
+		put(INTERVAL, String.valueOf(interval));
+	}
+
+	public int getMaxValues() {
+		if (get(MAX_VALUES) != null) {
+			return Integer.parseInt(get(MAX_VALUES));
+		} else {
+			return 1;
+		}
+	}
+
+	public void setMaxValues(int maxValues) {
+		put(INTERVAL, String.valueOf(maxValues));
+	}
+
+	public String getId() {
+		return get(ID);
+	}
+
+	public void setId(String id) {
+		put(ID, id);
+	}
+
+	public String getType() {
+		return get(TYPE);
+	}
+
+	public void setType(String type) {
+		put(TYPE, type);
+	}
+
+	@Override
+	public String toString() {
+		StringJoiner joiner = new StringJoiner(", ");
+		entrySet().forEach((Entry<String, String> e) -> {
+			joiner.add(e.getKey() + "=" + e.getValue());
+		});
+		return "{ " + joiner.toString() + " }";
+	}
+}
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/src/main/resources/context.properties b/examples/basyx.aasWrapper/src/main/resources/context.properties
new file mode 100644
index 0000000..6429487
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/resources/context.properties
@@ -0,0 +1,17 @@
+# ###############################
+# HTTP Context configuration file
+# ###############################
+
+# ###############################
+# Context Path
+# ###############################
+# Specifies the subpath in the url for this server context
+ 
+contextPath=/
+
+# ###############################
+# Port
+# ###############################
+# Specifies the port for this server context
+
+contextPort=6500
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/src/main/resources/wrapper.properties b/examples/basyx.aasWrapper/src/main/resources/wrapper.properties
new file mode 100644
index 0000000..957dc39
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/main/resources/wrapper.properties
@@ -0,0 +1,25 @@
+registry.endpoint=http://registry:4000/registry/
+
+properties.temp.type=AAS
+properties.temp.active=true
+properties.temp.aas=DashboardAAS
+properties.temp.submodel=DashboardSubmodel
+properties.temp.shortId=temperature
+properties.temp.interval=1000
+properties.temp.maxValues=10
+
+properties.dummy.type=AAS
+properties.dummy.active=false
+properties.dummy.aas=DashboardAAS
+properties.dummy.submodel=DashboardSubmodel
+properties.dummy.shortId=dummy
+properties.dummy.maxValues=3
+
+providers.simplified.type=STREAMSHEETS
+providers.simplified.path=/streamsheets
+
+providers.aas.type=AAS
+providers.aas.path=/proxyAAS
+
+providers.asdf.type=GRAFANA
+providers.asdf.path=/grafana
diff --git a/examples/basyx.aasWrapper/src/test/resources/.env b/examples/basyx.aasWrapper/src/test/resources/.env
new file mode 100644
index 0000000..790ac61
--- /dev/null
+++ b/examples/basyx.aasWrapper/src/test/resources/.env
@@ -0,0 +1,39 @@
+# ##################
+# Docker Environment
+# ##################
+
+# ##################
+# Host Port
+# ##################
+# Specifies the port for the Docker HOST the container port is mapped to
+
+BASYX_HOST_PORT=6500
+
+# ##################
+# Container Port
+# ##################
+# Specifies the port for the Docker CONTAINER that is be mapped for the host 
+
+BASYX_CONTAINER_PORT=6500
+
+# ##################
+# Image Name
+# ##################
+# The image of the image that is build for this component
+
+BASYX_IMAGE_NAME=basyx/aas-wrapper
+
+# ##################
+# Image Tag
+# ##################
+# The image tag of the image that is build for this component
+
+BASYX_IMAGE_TAG=0.1.0-SNAPSHOT
+
+# ##################
+# Container Name
+# ##################
+# The name of the container used for the default environment
+ 
+BASYX_CONTAINER_NAME=aas-wrapper
+
diff --git a/examples/basyx.aasWrapper/start.bat b/examples/basyx.aasWrapper/start.bat
new file mode 100644
index 0000000..7d0dc6c
--- /dev/null
+++ b/examples/basyx.aasWrapper/start.bat
@@ -0,0 +1 @@
+docker-compose up
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/start.sh b/examples/basyx.aasWrapper/start.sh
new file mode 100644
index 0000000..d935e43
--- /dev/null
+++ b/examples/basyx.aasWrapper/start.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose up
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/stop.bat b/examples/basyx.aasWrapper/stop.bat
new file mode 100644
index 0000000..58694d0
--- /dev/null
+++ b/examples/basyx.aasWrapper/stop.bat
@@ -0,0 +1 @@
+docker-compose down
\ No newline at end of file
diff --git a/examples/basyx.aasWrapper/stop.sh b/examples/basyx.aasWrapper/stop.sh
new file mode 100644
index 0000000..f5139e2
--- /dev/null
+++ b/examples/basyx.aasWrapper/stop.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose down
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/Dockerfile b/examples/basyx.dashboardAAS/Dockerfile
new file mode 100644
index 0000000..1a26b27
--- /dev/null
+++ b/examples/basyx.dashboardAAS/Dockerfile
@@ -0,0 +1,23 @@
+# Add java runtime environment for execution
+FROM java:8-jdk-alpine 
+
+# Copy built jar to image using the jar name specified in the pom.xml (JAR_FILE)
+ARG JAR_FILE
+COPY target/${JAR_FILE} /usr/share/basyxExecutable.jar
+COPY target/lib /usr/share/lib
+COPY src/main/resources/context.properties /usr/share/config/context.properties
+COPY src/main/resources/dashboardsubmodel.properties /usr/share/config/dashboardsubmodel.properties
+
+# Expose the appropriate port. In case of Tomcat, this is 8080.
+ARG PORT
+EXPOSE ${PORT}
+
+# Set the path for the context configuration file
+ARG CONTEXT_CONFIG_KEY
+ENV ${CONTEXT_CONFIG_KEY} "/usr/share/config/context.properties"
+
+# Set the path for the submodel config
+ENV BASYX_DASHBOARDSUBMODEL "/usr/share/config/dashboardsubmodel.properties"
+ 
+# Start the jar
+CMD java -jar "/usr/share/basyxExecutable.jar"
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/build.bat b/examples/basyx.dashboardAAS/build.bat
new file mode 100644
index 0000000..0977f37
--- /dev/null
+++ b/examples/basyx.dashboardAAS/build.bat
@@ -0,0 +1 @@
+.././mvnw clean install -U -Pdocker
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/build.sh b/examples/basyx.dashboardAAS/build.sh
new file mode 100644
index 0000000..d223f82
--- /dev/null
+++ b/examples/basyx.dashboardAAS/build.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+.././mvnw clean install -U -Pdocker -DskipTests
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/docker-compose.yml b/examples/basyx.dashboardAAS/docker-compose.yml
new file mode 100644
index 0000000..316eb9c
--- /dev/null
+++ b/examples/basyx.dashboardAAS/docker-compose.yml
@@ -0,0 +1,17 @@
+version: '3'
+services:
+
+  registry:
+    image: basyx/registry:0.1.0-SNAPSHOT
+    container_name: dashboard-registry
+    ports:
+      - 4000:4000
+
+  dashboard-aas:
+    image: basyx/dashboard-aas:0.1.0-SNAPSHOT
+    container_name: dashboard-aas
+    environment:
+      - BaSyxDashboardSubmodel_Min=15
+#      - BaSyxDashboardSubmodel_Max=30
+    ports:
+      - 6400:6400
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/pom.xml b/examples/basyx.dashboardAAS/pom.xml
new file mode 100644
index 0000000..ab16c85
--- /dev/null
+++ b/examples/basyx.dashboardAAS/pom.xml
@@ -0,0 +1,66 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.basyx</groupId>
+		<artifactId>basyx.components.docker</artifactId>
+		<version>0.1.0-SNAPSHOT</version>
+	</parent>
+	
+	<artifactId>basyx.components.dashboardAAS</artifactId>
+	<name>BaSyx Dashboard AAS</name>
+	
+	<properties>
+		<!--  
+			basyx.components.executable is the executable class with the definition of the public void main(String[]).
+			It is needed when building the jar in the maven-jar-plugin (see basyx.components.docker/pom.xml) 
+		-->
+		<basyx.components.executable>org.eclipse.basyx.dashboard.AASExecutable</basyx.components.executable>
+	</properties>
+	
+	<packaging>jar</packaging>
+	
+	<!-- Define additional plugins that are not included by default -->
+	<!-- Plugin configuration is done in parent project(s) -->
+	<build>
+		<plugins>
+			<!-- Attach sources to jar file -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+	
+	<profiles>
+		<profile>
+			<!-- 
+				"Docker" profile - do not build & install docker images by default
+				Run "mvn install -Pdocker" in order to include docker  
+			-->
+			<id>docker</id>
+			<build>
+				<plugins>
+					<!-- Read maven properties from file -->
+					<plugin>
+						<groupId>org.codehaus.mojo</groupId>
+						<artifactId>properties-maven-plugin</artifactId>
+					</plugin>
+				
+					<!-- Copy the dependencies necessary to run the jar -->
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-dependency-plugin</artifactId>
+					</plugin>
+				
+					<!-- Build the docker image -->
+					<plugin>
+						<groupId>com.spotify</groupId>
+						<artifactId>dockerfile-maven-plugin</artifactId>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+</project>
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/AASExecutable.java b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/AASExecutable.java
new file mode 100644
index 0000000..20d61d7
--- /dev/null
+++ b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/AASExecutable.java
@@ -0,0 +1,86 @@
+package org.eclipse.basyx.dashboard;
+
+import java.util.ArrayList;
+
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.aas.registration.proxy.AASRegistryProxy;
+import org.eclipse.basyx.aas.restapi.AASModelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
+import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer;
+import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Executable for a very basic, dynamic AAS, that is meant to be used in an example about how
+ * to integrate properties of "real" AAS in a dashboard.
+ * 
+ * @author espen
+ *
+ */
+public class AASExecutable {
+	private static final Logger logger = LoggerFactory.getLogger(AASExecutable.class);
+
+	public static final String HOST = "dashboard-aas";
+	public static final int PORT = 6400;
+	public static final String REGISTRY_ENDPOINT = "http://registry:4000/registry/";
+
+	public static void main(String[] args) throws Exception {
+		// Use docker-compose health check for registry instead
+		Thread.sleep(3000);
+
+		logger.info("Creating AAS...");
+		AssetAdministrationShell aas = new DashboardAssetAdministrationShell();
+		Asset asset = new DashboardAsset();
+		aas.setAsset(asset);
+		SubModel sm = new DashboardSubmodel();
+		aas.setConceptDictionary(new ArrayList<>());
+		aas.addSubModel(sm);
+		
+		logger.info("Starting aas servlet...");
+		createServlet(aas, sm);
+		logger.info("Registering aas...");
+		AASDescriptor descriptor = new AASDescriptor(aas, "http://" + HOST + ":" + PORT + "/aas");
+		descriptor.addSubmodelDescriptor(
+				new SubmodelDescriptor(sm, "http://" + HOST + ":" + PORT + "/aas/submodels/DashboardSubmodel/"));
+		registerAAS(descriptor, REGISTRY_ENDPOINT);
+
+		logger.info("Finished");
+	}
+
+	private static void registerAAS(AASDescriptor descriptor, String registryEndpoint) throws InterruptedException {
+		IAASRegistryService registry = new AASRegistryProxy(registryEndpoint);
+		// Quick & dirty, try to register until registry is up
+		for (int i = 0; i < 10; i++) {
+			try {
+				registry.register(descriptor);
+				break;
+			} catch (Exception e) {
+				Thread.sleep(2000);
+			}
+		}
+	}
+
+	private static void createServlet(AssetAdministrationShell aas, SubModel... submodels) {
+		VABMultiSubmodelProvider provider = new VABMultiSubmodelProvider();
+		provider.setAssetAdministrationShell(new AASModelProvider(aas));
+		for (SubModel sm : submodels) {
+			provider.addSubmodel(new SubModelProvider(sm));
+		}
+		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
+		config.loadFromDefaultSource();
+		BaSyxContext context = config.createBaSyxContext();
+		context.addServletMapping("/*", new VABHTTPInterface<IModelProvider>(provider));
+        AASHTTPServer server = new AASHTTPServer(context);
+		server.start();
+	}
+}
diff --git a/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardAsset.java b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardAsset.java
new file mode 100644
index 0000000..4f9b771
--- /dev/null
+++ b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardAsset.java
@@ -0,0 +1,19 @@
+package org.eclipse.basyx.dashboard;
+
+import org.eclipse.basyx.aas.metamodel.api.parts.asset.AssetKind;
+import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+
+/**
+ * A dummy Asset for the dashboar AAS
+ * 
+ * @author espen
+ *
+ */
+public class DashboardAsset extends Asset {
+	public DashboardAsset() {
+		setIdShort("DashboardAsset");
+		setIdentification(IdentifierType.CUSTOM, "DashboardAsset");
+		setAssetKind(AssetKind.INSTANCE);
+	}
+}
diff --git a/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardAssetAdministrationShell.java b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardAssetAdministrationShell.java
new file mode 100644
index 0000000..331b27d
--- /dev/null
+++ b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardAssetAdministrationShell.java
@@ -0,0 +1,17 @@
+package org.eclipse.basyx.dashboard;
+
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+
+/**
+ * A minimal AAS header for the dashboard AAS
+ * 
+ * @author espen
+ *
+ */
+public class DashboardAssetAdministrationShell extends AssetAdministrationShell {
+	public DashboardAssetAdministrationShell() {
+		setIdShort("DashboardAAS");
+		setIdentification(IdentifierType.CUSTOM, "DashboardAAS");
+	}
+}
diff --git a/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardSubmodel.java b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardSubmodel.java
new file mode 100644
index 0000000..8d67ace
--- /dev/null
+++ b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardSubmodel.java
@@ -0,0 +1,61 @@
+package org.eclipse.basyx.dashboard;
+
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
+
+/**
+ * Dummy Submodel with two dynamic values. A configurable temperature value that randomly
+ * returns values in a specific range. And a random boolean value.
+ * 
+ * @author espen
+ *
+ */
+public class DashboardSubmodel extends SubModel {
+	private int minValue;
+	private int maxValue;
+
+	public DashboardSubmodel() {
+		setIdShort("DashboardSubmodel");
+		setIdentification(IdentifierType.CUSTOM, "DashboardTemperatureSubmodel");
+		setSemanticId(new Reference(
+				new Key(KeyElements.CONCEPTDESCRIPTION, true, "0112/2///61360_4#AAF891#001", KeyType.IRDI)));
+		setTemperatureProperty();
+		setDummyProperty();
+
+		DashboardSubmodelConfiguration config = new DashboardSubmodelConfiguration();
+		config.loadFromDefaultSource();
+		minValue = config.getMin();
+		maxValue = config.getMax();
+	}
+
+	private void setTemperatureProperty() {
+		Property temperatureProperty = new Property();
+		temperatureProperty.setIdShort("temperature");
+		temperatureProperty.set(VABLambdaProviderHelper.createSimple(() -> {
+			return Math.random() * (maxValue - minValue) + minValue;
+		}, null), PropertyValueTypeDef.Double);
+		// Adds a reference to a semantic ID to specify the property semantics (see CDD)
+		// Ref by identifier:
+		Key key = new Key(KeyElements.CONCEPTDESCRIPTION, true, "0112/2///61360_4#AAF891#001", KeyType.IRDI);
+		IReference refByIdentifier = new Reference(key);
+		temperatureProperty.setSemanticID(refByIdentifier);
+		addSubModelElement(temperatureProperty);
+	}
+
+	private void setDummyProperty() {
+		Property dummyProperty = new Property();
+		dummyProperty.setIdShort("dummy");
+		dummyProperty.set(VABLambdaProviderHelper.createSimple(() -> {
+			return (Math.random() > 0.5);
+		}, null), PropertyValueTypeDef.Boolean);
+		addSubModelElement(dummyProperty);
+	}
+}
diff --git a/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardSubmodelConfiguration.java b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardSubmodelConfiguration.java
new file mode 100644
index 0000000..280c242
--- /dev/null
+++ b/examples/basyx.dashboardAAS/src/main/java/org/eclipse/basyx/dashboard/DashboardSubmodelConfiguration.java
@@ -0,0 +1,89 @@
+package org.eclipse.basyx.dashboard;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.basyx.components.configuration.BaSyxConfiguration;
+
+/**
+ * Simple configuration for setting minimal and maxmimal values for the dashboard submodel
+ * 
+ * @author espen
+ *
+ */
+public class DashboardSubmodelConfiguration extends BaSyxConfiguration {
+	// Prefix for environment variables
+	public static final String ENV_PREFIX = "BaSyxDashboardSubmodel_";
+
+	// Default BaSyx Context configuration
+	public static final int DEFAULT_MIN = 10;
+	public static final int DEFAULT_MAX = 30;
+
+	public static final String MIN = "Min";
+	public static final String MAX = "Max";
+
+	// The default path for the context properties file
+	public static final String DEFAULT_CONFIG_PATH = "dashboardsubmodel.properties";
+
+	// The default key for variables pointing to the configuration file
+	public static final String DEFAULT_FILE_KEY = "BASYX_DASHBOARDSUBMODEL";
+
+	public static Map<String, String> getDefaultProperties() {
+		Map<String, String> defaultProps = new HashMap<>();
+		defaultProps.put(MIN, Integer.toString(DEFAULT_MIN));
+		defaultProps.put(MAX, Integer.toString(DEFAULT_MAX));
+		return defaultProps;
+	}
+
+	/**
+	 * Empty Constructor - use default values
+	 */
+	public DashboardSubmodelConfiguration() {
+		super(getDefaultProperties());
+	}
+
+	/**
+	 * Constructor with predefined value map
+	 */
+	public DashboardSubmodelConfiguration(Map<String, String> values) {
+		super(values);
+	}
+
+	/**
+	 * Constructor with initial configuration - docBasePath and hostname are default values
+	 * 
+	 * @param min The minimal temperature value
+	 * @param max The maximal temperature value
+	 */
+	public DashboardSubmodelConfiguration(int min, int max) {
+		this();
+		setMin(min);
+		setMax(max);
+	}
+
+	public void loadFromEnvironmentVariables() {
+		String[] properties = { MIN, MAX };
+		loadFromEnvironmentVariables(ENV_PREFIX, properties);
+	}
+
+	public void loadFromDefaultSource() {
+		loadFileOrDefaultResource(DEFAULT_FILE_KEY, DEFAULT_CONFIG_PATH);
+		loadFromEnvironmentVariables();
+	}
+
+	public void setMin(int min) {
+		setProperty(MIN, Integer.toString(min));
+	}
+
+	public void setMax(int max) {
+		setProperty(MIN, Integer.toString(max));
+	}
+
+	public int getMin() {
+		return Integer.parseInt(getProperty(MIN));
+	}
+
+	public int getMax() {
+		return Integer.parseInt(getProperty(MAX));
+	}
+}
diff --git a/examples/basyx.dashboardAAS/src/main/resources/context.properties b/examples/basyx.dashboardAAS/src/main/resources/context.properties
new file mode 100644
index 0000000..9e4461a
--- /dev/null
+++ b/examples/basyx.dashboardAAS/src/main/resources/context.properties
@@ -0,0 +1,17 @@
+# ###############################
+# HTTP Context configuration file
+# ###############################
+
+# ###############################
+# Context Path
+# ###############################
+# Specifies the subpath in the url for this server context
+ 
+contextPath=/
+
+# ###############################
+# Port
+# ###############################
+# Specifies the port for this server context
+
+contextPort=6400
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/src/main/resources/dashboardsubmodel.properties b/examples/basyx.dashboardAAS/src/main/resources/dashboardsubmodel.properties
new file mode 100644
index 0000000..63bbaa6
--- /dev/null
+++ b/examples/basyx.dashboardAAS/src/main/resources/dashboardsubmodel.properties
@@ -0,0 +1,17 @@
+# ###############################
+# Dashboard submodel configuration
+# ###############################
+
+# ###############################
+# Min temperature value
+# ###############################
+# Specifies the min value for the dynamic random temperature
+ 
+Min=10
+
+# ###############################
+# Max temperature value
+# ###############################
+# Specifies the max value for the dynamic random temperature
+
+Max=30
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/src/test/resources/.env b/examples/basyx.dashboardAAS/src/test/resources/.env
new file mode 100644
index 0000000..0f1579a
--- /dev/null
+++ b/examples/basyx.dashboardAAS/src/test/resources/.env
@@ -0,0 +1,39 @@
+# ##################
+# Docker Environment
+# ##################
+
+# ##################
+# Host Port
+# ##################
+# Specifies the port for the Docker HOST the container port is mapped to
+
+BASYX_HOST_PORT=6400
+
+# ##################
+# Container Port
+# ##################
+# Specifies the port for the Docker CONTAINER that is be mapped for the host 
+
+BASYX_CONTAINER_PORT=6400
+
+# ##################
+# Image Name
+# ##################
+# The image of the image that is build for this component
+
+BASYX_IMAGE_NAME=basyx/dashboard-aas
+
+# ##################
+# Image Tag
+# ##################
+# The image tag of the image that is build for this component
+
+BASYX_IMAGE_TAG=0.1.0-SNAPSHOT
+
+# ##################
+# Container Name
+# ##################
+# The name of the container used for the default environment
+ 
+BASYX_CONTAINER_NAME=dashboard-aas
+
diff --git a/examples/basyx.dashboardAAS/start.bat b/examples/basyx.dashboardAAS/start.bat
new file mode 100644
index 0000000..7d0dc6c
--- /dev/null
+++ b/examples/basyx.dashboardAAS/start.bat
@@ -0,0 +1 @@
+docker-compose up
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/start.sh b/examples/basyx.dashboardAAS/start.sh
new file mode 100644
index 0000000..d935e43
--- /dev/null
+++ b/examples/basyx.dashboardAAS/start.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose up
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/stop.bat b/examples/basyx.dashboardAAS/stop.bat
new file mode 100644
index 0000000..58694d0
--- /dev/null
+++ b/examples/basyx.dashboardAAS/stop.bat
@@ -0,0 +1 @@
+docker-compose down
\ No newline at end of file
diff --git a/examples/basyx.dashboardAAS/stop.sh b/examples/basyx.dashboardAAS/stop.sh
new file mode 100644
index 0000000..f5139e2
--- /dev/null
+++ b/examples/basyx.dashboardAAS/stop.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose down
\ No newline at end of file
diff --git a/examples/basyx.grafana/.gitignore b/examples/basyx.grafana/.gitignore
new file mode 100644
index 0000000..a5271c0
--- /dev/null
+++ b/examples/basyx.grafana/.gitignore
@@ -0,0 +1 @@
+/lib/plugins/*
\ No newline at end of file
diff --git a/examples/basyx.grafana/dashboard.json b/examples/basyx.grafana/dashboard.json
new file mode 100644
index 0000000..624f1a5
--- /dev/null
+++ b/examples/basyx.grafana/dashboard.json
@@ -0,0 +1,110 @@
+{
+  "annotations": {
+    "list": [
+      {
+        "builtIn": 1,
+        "datasource": "-- Grafana --",
+        "enable": true,
+        "hide": true,
+        "iconColor": "rgba(0, 211, 255, 1)",
+        "name": "Annotations & Alerts",
+        "type": "dashboard"
+      }
+    ]
+  },
+  "editable": true,
+  "gnetId": null,
+  "graphTooltip": 0,
+  "id": 1,
+  "links": [],
+  "panels": [
+    {
+      "datasource": null,
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "custom": {},
+          "mappings": [],
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "#EAB839",
+                "value": 20
+              },
+              {
+                "color": "red",
+                "value": 27
+              }
+            ]
+          },
+          "unit": "celsius"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 6,
+        "x": 0,
+        "y": 0
+      },
+      "id": 2,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "7.4.0",
+      "targets": [
+        {
+          "refId": "A",
+          "target": "temp",
+          "type": "timeserie"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Temperature",
+      "transparent": true,
+      "type": "stat"
+    }
+  ],
+  "refresh": "1s",
+  "schemaVersion": 27,
+  "style": "dark",
+  "tags": [],
+  "templating": {
+    "list": []
+  },
+  "time": {
+    "from": "now-10s",
+    "to": "now"
+  },
+  "timepicker": {
+    "refresh_intervals": [
+      "1s"
+    ]
+  },
+  "timezone": "",
+  "title": "BaSyx Temperature",
+  "uid": "forkaVEGz",
+  "version": 5
+}
\ No newline at end of file
diff --git a/examples/basyx.grafana/docker-compose.yml b/examples/basyx.grafana/docker-compose.yml
new file mode 100644
index 0000000..a6a0f87
--- /dev/null
+++ b/examples/basyx.grafana/docker-compose.yml
@@ -0,0 +1,32 @@
+version: '2.1'
+services:
+
+  registry:
+    image: basyx/registry:0.1.0-SNAPSHOT
+    container_name: dashboard-registry
+    ports:
+      - 4000:4000
+
+  dashboard-aas:
+    image: basyx/dashboard-aas:0.1.0-SNAPSHOT
+    container_name: dashboard-aas
+    environment:
+      - BaSyxDashboardSubmodel_Min=15
+#      - BaSyxDashboardSubmodel_Max=30
+    ports:
+      - 6400:6400
+
+  aas-wrapper:
+    image: basyx/aas-wrapper:0.1.0-SNAPSHOT
+    container_name: aas-wrapper
+    ports:
+      - 6500:6500
+
+  grafana:
+    image: grafana/grafana:7.4.0
+    container_name: grafana
+    ports:
+      - 3000:3000
+    volumes:
+      - ./lib:/var/lib/grafana
+      - ./grafana.ini:/etc/grafana/grafana.ini
\ No newline at end of file
diff --git a/examples/basyx.grafana/grafana.ini b/examples/basyx.grafana/grafana.ini
new file mode 100644
index 0000000..098e757
--- /dev/null
+++ b/examples/basyx.grafana/grafana.ini
@@ -0,0 +1,902 @@
+##################### Grafana Configuration Defaults #####################
+#
+# Do not modify this file in grafana installs
+#
+
+# possible values : production, development
+app_mode = production
+
+# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty
+instance_name = ${HOSTNAME}
+
+#################################### Paths ###############################
+[paths]
+# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
+data = data
+
+# Temporary files in `data` directory older than given duration will be removed
+temp_data_lifetime = 24h
+
+# Directory where grafana can store logs
+logs = data/log
+
+# Directory where grafana will automatically scan and look for plugins
+plugins = data/plugins
+
+# folder that contains provisioning config files that grafana will apply on startup and while running.
+provisioning = conf/provisioning
+
+#################################### Server ##############################
+[server]
+# Protocol (http, https, h2, socket)
+protocol = http
+
+# The ip address to bind to, empty will bind to all interfaces
+http_addr =
+
+# The http port to use
+http_port = 3000
+
+# The public facing domain name used to access grafana from a browser
+domain = localhost
+
+# Redirect to correct domain if host header does not match domain
+# Prevents DNS rebinding attacks
+enforce_domain = false
+
+# The full public facing url
+root_url = %(protocol)s://%(domain)s:%(http_port)s/
+
+# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
+serve_from_sub_path = false
+
+# Log web requests
+router_logging = false
+
+# the path relative working path
+static_root_path = public
+
+# enable gzip
+enable_gzip = false
+
+# https certs & key file
+cert_file =
+cert_key =
+
+# Unix socket path
+socket = /tmp/grafana.sock
+
+# CDN Url
+cdn_url =
+
+#################################### Database ############################
+[database]
+# You can configure the database connection by specifying type, host, name, user and password
+# as separate properties or as on string using the url property.
+
+# Either "mysql", "postgres" or "sqlite3", it's your choice
+type = sqlite3
+host = 127.0.0.1:3306
+name = grafana
+user = root
+# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
+password =
+# Use either URL or the previous fields to configure the database
+# Example: mysql://user:secret@host:port/database
+url =
+
+# Max idle conn setting default is 2
+max_idle_conn = 2
+
+# Max conn setting default is 0 (mean not set)
+max_open_conn =
+
+# Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours)
+conn_max_lifetime = 14400
+
+# Set to true to log the sql calls and execution times.
+log_queries =
+
+# For "postgres", use either "disable", "require" or "verify-full"
+# For "mysql", use either "true", "false", or "skip-verify".
+ssl_mode = disable
+
+ca_cert_path =
+client_key_path =
+client_cert_path =
+server_cert_name =
+
+# For "sqlite3" only, path relative to data_path setting
+path = grafana.db
+
+# For "sqlite3" only. cache mode setting used for connecting to the database
+cache_mode = private
+
+#################################### Cache server #############################
+[remote_cache]
+# Either "redis", "memcached" or "database" default is "database"
+type = database
+
+# cache connectionstring options
+# database: will use Grafana primary database.
+# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=0,ssl=false`. Only addr is required. ssl may be 'true', 'false', or 'insecure'.
+# memcache: 127.0.0.1:11211
+connstr =
+
+#################################### Data proxy ###########################
+[dataproxy]
+
+# This enables data proxy logging, default is false
+logging = false
+
+# How long the data proxy waits before timing out, default is 30 seconds.
+# This setting also applies to core backend HTTP data sources where query requests use an HTTP client with timeout set.
+timeout = 30
+
+# How many seconds the data proxy waits before sending a keepalive request.
+keep_alive_seconds = 30
+
+# How many seconds the data proxy waits for a successful TLS Handshake before timing out.
+tls_handshake_timeout_seconds = 10
+
+# How many seconds the data proxy will wait for a server's first response headers after
+# fully writing the request headers if the request has an "Expect: 100-continue"
+# header. A value of 0 will result in the body being sent immediately, without
+# waiting for the server to approve.
+expect_continue_timeout_seconds = 1
+
+# The maximum number of idle connections that Grafana will keep alive.
+max_idle_connections = 100
+
+# How many seconds the data proxy keeps an idle connection open before timing out.
+idle_conn_timeout_seconds = 90
+
+# If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request.
+send_user_header = false
+
+#################################### Analytics ###########################
+[analytics]
+# Server reporting, sends usage counters to stats.grafana.org every 24 hours.
+# No ip addresses are being tracked, only simple counters to track
+# running instances, dashboard and error counts. It is very helpful to us.
+# Change this option to false to disable reporting.
+reporting_enabled = true
+
+# Set to false to disable all checks to https://grafana.com
+# for new versions (grafana itself and plugins), check is used
+# in some UI views to notify that grafana or plugin update exists
+# This option does not cause any auto updates, nor send any information
+# only a GET request to https://grafana.com to get latest versions
+check_for_updates = true
+
+# Google Analytics universal tracking code, only enabled if you specify an id here
+google_analytics_ua_id =
+
+# Google Tag Manager ID, only enabled if you specify an id here
+google_tag_manager_id =
+
+#################################### Security ############################
+[security]
+# disable creation of admin user on first start of grafana
+disable_initial_admin_creation = false
+
+# default admin user, created on startup
+admin_user = admin
+
+# default admin password, can be changed before first start of grafana, or in profile settings
+admin_password = admin
+
+# used for signing
+secret_key = SW2YcwTIb9zpOOhoPsMm
+
+# disable gravatar profile images
+disable_gravatar = false
+
+# data source proxy whitelist (ip_or_domain:port separated by spaces)
+data_source_proxy_whitelist =
+
+# disable protection against brute force login attempts
+disable_brute_force_login_protection = false
+
+# set to true if you host Grafana behind HTTPS. default is false.
+cookie_secure = false
+
+# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled"
+cookie_samesite = lax
+
+# set to true if you want to allow browsers to render Grafana in a <frame>, <iframe>, <embed> or <object>. default is false.
+allow_embedding = false
+
+# Set to true if you want to enable http strict transport security (HSTS) response header.
+# This is only sent when HTTPS is enabled in this configuration.
+# HSTS tells browsers that the site should only be accessed using HTTPS.
+strict_transport_security = false
+
+# Sets how long a browser should cache HSTS. Only applied if strict_transport_security is enabled.
+strict_transport_security_max_age_seconds = 86400
+
+# Set to true if to enable HSTS preloading option. Only applied if strict_transport_security is enabled.
+strict_transport_security_preload = false
+
+# Set to true if to enable the HSTS includeSubDomains option. Only applied if strict_transport_security is enabled.
+strict_transport_security_subdomains = false
+
+# Set to true to enable the X-Content-Type-Options response header.
+# The X-Content-Type-Options response HTTP header is a marker used by the server to indicate that the MIME types advertised
+# in the Content-Type headers should not be changed and be followed.
+x_content_type_options = true
+
+# Set to true to enable the X-XSS-Protection header, which tells browsers to stop pages from loading
+# when they detect reflected cross-site scripting (XSS) attacks.
+x_xss_protection = true
+
+# Enable adding the Content-Security-Policy header to your requests.
+# CSP allows to control resources the user agent is allowed to load and helps prevent XSS attacks.
+content_security_policy = false
+
+# Set Content Security Policy template used when adding the Content-Security-Policy header to your requests.
+# $NONCE in the template includes a random nonce.
+content_security_policy_template = """script-src 'unsafe-eval' 'strict-dynamic' $NONCE;object-src 'none';font-src 'self';style-src 'self' 'unsafe-inline';img-src 'self' data:;base-uri 'self';connect-src 'self' grafana.com;manifest-src 'self';media-src 'none';form-action 'self';"""
+
+#################################### Snapshots ###########################
+[snapshots]
+# snapshot sharing options
+external_enabled = true
+external_snapshot_url = https://snapshots-origin.raintank.io
+external_snapshot_name = Publish to snapshot.raintank.io
+
+# Set to true to enable this Grafana instance act as an external snapshot server and allow unauthenticated requests for
+# creating and deleting snapshots.
+public_mode = false
+
+# remove expired snapshot
+snapshot_remove_expired = true
+
+#################################### Dashboards ##################
+
+[dashboards]
+# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
+versions_to_keep = 20
+
+# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is 5 seconds.
+# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
+min_refresh_interval = 1s
+
+# Path to the default home dashboard. If this value is empty, then Grafana uses StaticRootPath + "dashboards/home.json"
+default_home_dashboard_path =
+
+################################### Data sources #########################
+[datasources]
+# Upper limit of data sources that Grafana will return. This limit is a temporary configuration and it will be deprecated when pagination will be introduced on the list data sources API.
+datasource_limit = 5000
+
+#################################### Users ###############################
+[users]
+# disable user signup / registration
+allow_sign_up = false
+
+# Allow non admin users to create organizations
+allow_org_create = false
+
+# Set to true to automatically assign new users to the default organization (id 1)
+auto_assign_org = true
+
+# Set this value to automatically add new users to the provided organization (if auto_assign_org above is set to true)
+auto_assign_org_id = 1
+
+# Default role new users will be automatically assigned (if auto_assign_org above is set to true)
+auto_assign_org_role = Viewer
+
+# Require email validation before sign up completes
+verify_email_enabled = false
+
+# Background text for the user field on the login page
+login_hint = email or username
+password_hint = password
+
+# Default UI theme ("dark" or "light")
+default_theme = dark
+
+# External user management
+external_manage_link_url =
+external_manage_link_name =
+external_manage_info =
+
+# Viewers can edit/inspect dashboard settings in the browser. But not save the dashboard.
+viewers_can_edit = false
+
+# Editors can administrate dashboard, folders and teams they create
+editors_can_admin = false
+
+# The duration in time a user invitation remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 24h (24 hours). The minimum supported duration is 15m (15 minutes).
+user_invite_max_lifetime_duration = 24h
+
+# Enter a comma-separated list of usernames to hide them in the Grafana UI. These users are shown to Grafana admins and to themselves.
+hidden_users =
+
+[auth]
+# Login cookie name
+login_cookie_name = grafana_session
+
+# The maximum lifetime (duration) an authenticated user can be inactive before being required to login at next visit. Default is 7 days (7d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). The lifetime resets at each successful token rotation (token_rotation_interval_minutes).
+login_maximum_inactive_lifetime_duration =
+
+# The maximum lifetime (duration) an authenticated user can be logged in since login time before being required to login. Default is 30 days (30d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month).
+login_maximum_lifetime_duration =
+
+# How often should auth tokens be rotated for authenticated users when being active. The default is each 10 minutes.
+token_rotation_interval_minutes = 10
+
+# Set to true to disable (hide) the login form, useful if you use OAuth
+disable_login_form = false
+
+# Set to true to disable the signout link in the side menu. useful if you use auth.proxy
+disable_signout_menu = false
+
+# URL to redirect the user to after sign out
+signout_redirect_url =
+
+# Set to true to attempt login with OAuth automatically, skipping the login screen.
+# This setting is ignored if multiple OAuth providers are configured.
+oauth_auto_login = false
+
+# OAuth state max age cookie duration in seconds. Defaults to 600 seconds.
+oauth_state_cookie_max_age = 600
+
+# limit of api_key seconds to live before expiration
+api_key_max_seconds_to_live = -1
+
+# Set to true to enable SigV4 authentication option for HTTP-based datasources
+sigv4_auth_enabled = false
+
+#################################### Anonymous Auth ######################
+[auth.anonymous]
+# enable anonymous access
+enabled = false
+
+# specify organization name that should be used for unauthenticated users
+org_name = Main Org.
+
+# specify role for unauthenticated users
+org_role = Viewer
+
+# mask the Grafana version number for unauthenticated users
+hide_version = false
+
+#################################### GitHub Auth #########################
+[auth.github]
+enabled = false
+allow_sign_up = true
+client_id = some_id
+client_secret =
+scopes = user:email,read:org
+auth_url = https://github.com/login/oauth/authorize
+token_url = https://github.com/login/oauth/access_token
+api_url = https://api.github.com/user
+allowed_domains =
+team_ids =
+allowed_organizations =
+
+#################################### GitLab Auth #########################
+[auth.gitlab]
+enabled = false
+allow_sign_up = true
+client_id = some_id
+client_secret =
+scopes = api
+auth_url = https://gitlab.com/oauth/authorize
+token_url = https://gitlab.com/oauth/token
+api_url = https://gitlab.com/api/v4
+allowed_domains =
+allowed_groups =
+
+#################################### Google Auth #########################
+[auth.google]
+enabled = false
+allow_sign_up = true
+client_id = some_client_id
+client_secret =
+scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
+auth_url = https://accounts.google.com/o/oauth2/auth
+token_url = https://accounts.google.com/o/oauth2/token
+api_url = https://www.googleapis.com/oauth2/v1/userinfo
+allowed_domains =
+hosted_domain =
+
+#################################### Grafana.com Auth ####################
+# legacy key names (so they work in env variables)
+[auth.grafananet]
+enabled = false
+allow_sign_up = true
+client_id = some_id
+client_secret =
+scopes = user:email
+allowed_organizations =
+
+[auth.grafana_com]
+enabled = false
+allow_sign_up = true
+client_id = some_id
+client_secret =
+scopes = user:email
+allowed_organizations =
+
+#################################### Azure AD OAuth #######################
+[auth.azuread]
+name = Azure AD
+enabled = false
+allow_sign_up = true
+client_id = some_client_id
+client_secret =
+scopes = openid email profile
+auth_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
+token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
+allowed_domains =
+allowed_groups =
+
+#################################### Okta OAuth #######################
+[auth.okta]
+name = Okta
+enabled = false
+allow_sign_up = true
+client_id = some_id
+client_secret =
+scopes = openid profile email groups
+auth_url = https://<tenant-id>.okta.com/oauth2/v1/authorize
+token_url = https://<tenant-id>.okta.com/oauth2/v1/token
+api_url = https://<tenant-id>.okta.com/oauth2/v1/userinfo
+allowed_domains =
+allowed_groups =
+role_attribute_path =
+
+#################################### Generic OAuth #######################
+[auth.generic_oauth]
+name = OAuth
+enabled = false
+allow_sign_up = true
+client_id = some_id
+client_secret =
+scopes = user:email
+email_attribute_name = email:primary
+email_attribute_path =
+login_attribute_path =
+name_attribute_path =
+role_attribute_path =
+id_token_attribute_name =
+auth_url =
+token_url =
+api_url =
+allowed_domains =
+team_ids =
+allowed_organizations =
+tls_skip_verify_insecure = false
+tls_client_cert =
+tls_client_key =
+tls_client_ca =
+
+#################################### Basic Auth ##########################
+[auth.basic]
+enabled = true
+
+#################################### Auth Proxy ##########################
+[auth.proxy]
+enabled = false
+header_name = X-WEBAUTH-USER
+header_property = username
+auto_sign_up = true
+# Deprecated, use sync_ttl instead
+ldap_sync_ttl = 60
+sync_ttl = 60
+whitelist =
+headers =
+enable_login_token = false
+
+#################################### Auth LDAP ###########################
+[auth.ldap]
+enabled = false
+config_file = /etc/grafana/ldap.toml
+allow_sign_up = true
+
+# LDAP background sync (Enterprise only)
+# At 1 am every day
+sync_cron = "0 0 1 * * *"
+active_sync_enabled = true
+
+#################################### SMTP / Emailing #####################
+[smtp]
+enabled = false
+host = localhost:25
+user =
+# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
+password =
+cert_file =
+key_file =
+skip_verify = false
+from_address = admin@grafana.localhost
+from_name = Grafana
+ehlo_identity =
+startTLS_policy =
+
+[emails]
+welcome_email_on_sign_up = false
+templates_pattern = emails/*.html
+
+#################################### Logging ##########################
+[log]
+# Either "console", "file", "syslog". Default is console and file
+# Use space to separate multiple modes, e.g. "console file"
+mode = console file
+
+# Either "debug", "info", "warn", "error", "critical", default is "info"
+level = info
+
+# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug
+filters =
+
+# For "console" mode only
+[log.console]
+level =
+
+# log line format, valid options are text, console and json
+format = console
+
+# For "file" mode only
+[log.file]
+level =
+
+# log line format, valid options are text, console and json
+format = text
+
+# This enables automated log rotate(switch of following options), default is true
+log_rotate = true
+
+# Max line number of single file, default is 1000000
+max_lines = 1000000
+
+# Max size shift of single file, default is 28 means 1 << 28, 256MB
+max_size_shift = 28
+
+# Segment log daily, default is true
+daily_rotate = true
+
+# Expired days of log file(delete after max days), default is 7
+max_days = 7
+
+[log.syslog]
+level =
+
+# log line format, valid options are text, console and json
+format = text
+
+# Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used.
+network =
+address =
+
+# Syslog facility. user, daemon and local0 through local7 are valid.
+facility =
+
+# Syslog tag. By default, the process' argv[0] is used.
+tag =
+
+[log.frontend]
+# Should Sentry javascript agent be initialized
+enabled = false
+
+# Sentry DSN if you want to send events to Sentry.
+sentry_dsn =
+
+# Custom HTTP endpoint to send events captured by the Sentry agent to. Default will log the events to stdout.
+custom_endpoint = /log
+
+# Rate of events to be reported between 0 (none) and 1 (all), float
+sample_rate = 1.0
+
+# Requests per second limit enforced per an extended period, for Grafana backend log ingestion endpoint (/log).
+log_endpoint_requests_per_second_limit = 3
+
+# Max requests accepted per short interval of time for Grafana backend log ingestion endpoint (/log)
+log_endpoint_burst_limit = 15
+
+#################################### Usage Quotas ########################
+[quota]
+enabled = false
+
+#### set quotas to -1 to make unlimited. ####
+# limit number of users per Org.
+org_user = 10
+
+# limit number of dashboards per Org.
+org_dashboard = 100
+
+# limit number of data_sources per Org.
+org_data_source = 10
+
+# limit number of api_keys per Org.
+org_api_key = 10
+
+# limit number of orgs a user can create.
+user_org = 10
+
+# Global limit of users.
+global_user = -1
+
+# global limit of orgs.
+global_org = -1
+
+# global limit of dashboards
+global_dashboard = -1
+
+# global limit of api_keys
+global_api_key = -1
+
+# global limit on number of logged in users.
+global_session = -1
+
+#################################### Alerting ############################
+[alerting]
+# Disable alerting engine & UI features
+enabled = true
+# Makes it possible to turn off alert rule execution but alerting UI is visible
+execute_alerts = true
+
+# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state)
+error_or_timeout = alerting
+
+# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
+nodata_or_nullvalues = no_data
+
+# Alert notifications can include images, but rendering many images at the same time can overload the server
+# This limit will protect the server from render overloading and make sure notifications are sent out quickly
+concurrent_render_limit = 5
+
+# Default setting for alert calculation timeout. Default value is 30
+evaluation_timeout_seconds = 30
+
+# Default setting for alert notification timeout. Default value is 30
+notification_timeout_seconds = 30
+
+# Default setting for max attempts to sending alert notifications. Default value is 3
+max_attempts = 3
+
+# Makes it possible to enforce a minimal interval between evaluations, to reduce load on the backend
+min_interval_seconds = 1
+
+# Configures for how long alert annotations are stored. Default is 0, which keeps them forever.
+# This setting should be expressed as an duration. Ex 6h (hours), 10d (days), 2w (weeks), 1M (month).
+max_annotation_age =
+
+# Configures max number of alert annotations that Grafana stores. Default value is 0, which keeps all alert annotations.
+max_annotations_to_keep =
+
+#################################### Annotations #########################
+
+[annotations.dashboard]
+# Dashboard annotations means that annotations are associated with the dashboard they are created on.
+
+# Configures how long dashboard annotations are stored. Default is 0, which keeps them forever.
+# This setting should be expressed as a duration. Examples: 6h (hours), 10d (days), 2w (weeks), 1M (month).
+max_age =
+
+# Configures max number of dashboard annotations that Grafana stores. Default value is 0, which keeps all dashboard annotations.
+max_annotations_to_keep =
+
+[annotations.api]
+# API annotations means that the annotations have been created using the API without any
+# association with a dashboard.
+
+# Configures how long Grafana stores API annotations. Default is 0, which keeps them forever.
+# This setting should be expressed as a duration. Examples: 6h (hours), 10d (days), 2w (weeks), 1M (month).
+max_age =
+
+# Configures max number of API annotations that Grafana keeps. Default value is 0, which keeps all API annotations.
+max_annotations_to_keep =
+
+#################################### Explore #############################
+[explore]
+# Enable the Explore section
+enabled = true
+
+#################################### Internal Grafana Metrics ############
+# Metrics available at HTTP API Url /metrics
+[metrics]
+enabled              = true
+interval_seconds     = 10
+# Disable total stats (stat_totals_*) metrics to be generated
+disable_total_stats = false
+
+#If both are set, basic auth will be required for the metrics endpoint.
+basic_auth_username =
+basic_auth_password =
+
+# Metrics environment info adds dimensions to the `grafana_environment_info` metric, which
+# can expose more information about the Grafana instance.
+[metrics.environment_info]
+#exampleLabel1 = exampleValue1
+#exampleLabel2 = exampleValue2
+
+# Send internal Grafana metrics to graphite
+[metrics.graphite]
+# Enable by setting the address setting (ex localhost:2003)
+address =
+prefix = prod.grafana.%(instance_name)s.
+
+#################################### Grafana.com integration  ##########################
+[grafana_net]
+url = https://grafana.com
+
+[grafana_com]
+url = https://grafana.com
+
+#################################### Distributed tracing ############
+[tracing.jaeger]
+# jaeger destination (ex localhost:6831)
+address =
+# tag that will always be included in when creating new spans. ex (tag1:value1,tag2:value2)
+always_included_tag =
+# Type specifies the type of the sampler: const, probabilistic, rateLimiting, or remote
+sampler_type = const
+# jaeger samplerconfig param
+# for "const" sampler, 0 or 1 for always false/true respectively
+# for "probabilistic" sampler, a probability between 0 and 1
+# for "rateLimiting" sampler, the number of spans per second
+# for "remote" sampler, param is the same as for "probabilistic"
+# and indicates the initial sampling rate before the actual one
+# is received from the mothership
+sampler_param = 1
+# sampling_server_url is the URL of a sampling manager providing a sampling strategy.
+sampling_server_url =
+# Whether or not to use Zipkin span propagation (x-b3- HTTP headers).
+zipkin_propagation = false
+# Setting this to true disables shared RPC spans.
+# Not disabling is the most common setting when using Zipkin elsewhere in your infrastructure.
+disable_shared_zipkin_spans = false
+
+#################################### External Image Storage ##############
+[external_image_storage]
+# Used for uploading images to public servers so they can be included in slack/email messages.
+# You can choose between (s3, webdav, gcs, azure_blob, local)
+provider =
+
+[external_image_storage.s3]
+endpoint =
+path_style_access =
+bucket_url =
+bucket =
+region =
+path =
+access_key =
+secret_key =
+
+[external_image_storage.webdav]
+url =
+username =
+password =
+public_url =
+
+[external_image_storage.gcs]
+key_file =
+bucket =
+path =
+enable_signed_urls = false
+signed_url_expiration =
+
+[external_image_storage.azure_blob]
+account_name =
+account_key =
+container_name =
+
+[external_image_storage.local]
+# does not require any configuration
+
+[rendering]
+# Options to configure a remote HTTP image rendering service, e.g. using https://github.com/grafana/grafana-image-renderer.
+# URL to a remote HTTP image renderer service, e.g. http://localhost:8081/render, will enable Grafana to render panels and dashboards to PNG-images using HTTP requests to an external service.
+server_url =
+# If the remote HTTP image renderer service runs on a different server than the Grafana server you may have to configure this to a URL where Grafana is reachable, e.g. http://grafana.domain/.
+callback_url =
+# Concurrent render request limit affects when the /render HTTP endpoint is used. Rendering many images at the same time can overload the server,
+# which this setting can help protect against by only allowing a certain amount of concurrent requests.
+concurrent_render_request_limit = 30
+
+[panels]
+# here for to support old env variables, can remove after a few months
+enable_alpha = false
+disable_sanitize_html = false
+
+[plugins]
+enable_alpha = false
+app_tls_skip_verify_insecure = false
+# Enter a comma-separated list of plugin identifiers to identify plugins that are allowed to be loaded even if they lack a valid signature.
+allow_loading_unsigned_plugins =
+marketplace_url = https://grafana.com/grafana/plugins/
+
+#################################### Grafana Image Renderer Plugin ##########################
+[plugin.grafana-image-renderer]
+# Instruct headless browser instance to use a default timezone when not provided by Grafana, e.g. when rendering panel image of alert.
+# See ICU’s metaZones.txt (https://cs.chromium.org/chromium/src/third_party/icu/source/data/misc/metaZones.txt) for a list of supported
+# timezone IDs. Fallbacks to TZ environment variable if not set.
+rendering_timezone =
+
+# Instruct headless browser instance to use a default language when not provided by Grafana, e.g. when rendering panel image of alert.
+# Please refer to the HTTP header Accept-Language to understand how to format this value, e.g. 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5'.
+rendering_language =
+
+# Instruct headless browser instance to use a default device scale factor when not provided by Grafana, e.g. when rendering panel image of alert.
+# Default is 1. Using a higher value will produce more detailed images (higher DPI), but will require more disk space to store an image.
+rendering_viewport_device_scale_factor =
+
+# Instruct headless browser instance whether to ignore HTTPS errors during navigation. Per default HTTPS errors are not ignored. Due to
+# the security risk it's not recommended to ignore HTTPS errors.
+rendering_ignore_https_errors =
+
+# Instruct headless browser instance whether to capture and log verbose information when rendering an image. Default is false and will
+# only capture and log error messages. When enabled, debug messages are captured and logged as well.
+# For the verbose information to be included in the Grafana server log you have to adjust the rendering log level to debug, configure
+# [log].filter = rendering:debug.
+rendering_verbose_logging =
+
+# Instruct headless browser instance whether to output its debug and error messages into running process of remote rendering service.
+# Default is false. This can be useful to enable (true) when troubleshooting.
+rendering_dumpio =
+
+# Additional arguments to pass to the headless browser instance. Default is --no-sandbox. The list of Chromium flags can be found
+# here (https://peter.sh/experiments/chromium-command-line-switches/). Multiple arguments is separated with comma-character.
+rendering_args =
+
+# You can configure the plugin to use a different browser binary instead of the pre-packaged version of Chromium.
+# Please note that this is not recommended, since you may encounter problems if the installed version of Chrome/Chromium is not
+# compatible with the plugin.
+rendering_chrome_bin =
+
+# Instruct how headless browser instances are created. Default is 'default' and will create a new browser instance on each request.
+# Mode 'clustered' will make sure that only a maximum of browsers/incognito pages can execute concurrently.
+# Mode 'reusable' will have one browser instance and will create a new incognito page on each request.
+rendering_mode =
+
+# When rendering_mode = clustered you can instruct how many browsers or incognito pages can execute concurrently. Default is 'browser'
+# and will cluster using browser instances.
+# Mode 'context' will cluster using incognito pages.
+rendering_clustering_mode =
+# When rendering_mode = clustered you can define maximum number of browser instances/incognito pages that can execute concurrently..
+rendering_clustering_max_concurrency =
+
+# Limit the maximum viewport width, height and device scale factor that can be requested.
+rendering_viewport_max_width =
+rendering_viewport_max_height =
+rendering_viewport_max_device_scale_factor =
+
+# Change the listening host and port of the gRPC server. Default host is 127.0.0.1 and default port is 0 and will automatically assign
+# a port not in use.
+grpc_host =
+grpc_port =
+
+[enterprise]
+license_path =
+
+[feature_toggles]
+# enable features, separated by spaces
+enable =
+
+[date_formats]
+# For information on what formatting patterns that are supported https://momentjs.com/docs/#/displaying/
+
+# Default system date format used in time range picker and other places where full time is displayed
+full_date = YYYY-MM-DD HH:mm:ss
+
+# Used by graph and other places where we only show small intervals
+interval_second = HH:mm:ss
+interval_minute = HH:mm
+interval_hour = MM/DD HH:mm
+interval_day = MM/DD
+interval_month = YYYY-MM
+interval_year = YYYY
+
+# Experimental feature
+use_browser_locale = false
+
+# Default timezone for user preferences. Options are 'browser' for the browser local timezone or a timezone name from IANA Time Zone database, e.g. 'UTC' or 'Europe/Amsterdam' etc.
+default_timezone = browser
+
+[expressions]
+# Enable or disable the expressions functionality.
+enabled = true
diff --git a/examples/basyx.grafana/lib/grafana.db b/examples/basyx.grafana/lib/grafana.db
new file mode 100644
index 0000000..9304575
--- /dev/null
+++ b/examples/basyx.grafana/lib/grafana.db
Binary files differ
diff --git a/examples/basyx.grafana/readme.txt b/examples/basyx.grafana/readme.txt
new file mode 100644
index 0000000..cd5669e
--- /dev/null
+++ b/examples/basyx.grafana/readme.txt
@@ -0,0 +1,28 @@
+HowTo: First Setup
+------------------
+
+1. Download SimpleJSON datasource from Grafana
+- Download .zip-file at
+	https://grafana.com/grafana/plugins/grafana-simple-json-datasource/installation
+- Unzip it in /lib/plugins:
+	/lib/plugins/grafana-simple-json-datasource/ should directly contain its files (e.g. package.json)
+
+2. Start docker-compose
+- Run "docker-compose up" in the /grafana/ folder
+
+3. Login (admin/admin)
+- http://localhost:3000/
+
+4. Add datasource
+- Configuration -> Datasources -> Add datasource -> Others: SimpleJson 
+
+5. Set URL Configuration in SimpleJson Datasource:
+URL -> http://aas-wrapper:6500/grafana/
+
+6. Import Dashboard
+- Dashboards -> Manage -> Import -> Upload dashboard.json
+
+7. Open BaSyx Dashboard
+- Dashboards -> Manage -> BaSyx Temperature
+- Optional: Set auto-refresh to 1s
+
diff --git a/examples/basyx.grafana/start.bat b/examples/basyx.grafana/start.bat
new file mode 100644
index 0000000..7d0dc6c
--- /dev/null
+++ b/examples/basyx.grafana/start.bat
@@ -0,0 +1 @@
+docker-compose up
\ No newline at end of file
diff --git a/examples/basyx.grafana/start.sh b/examples/basyx.grafana/start.sh
new file mode 100644
index 0000000..d935e43
--- /dev/null
+++ b/examples/basyx.grafana/start.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose up
\ No newline at end of file
diff --git a/examples/basyx.grafana/stop.bat b/examples/basyx.grafana/stop.bat
new file mode 100644
index 0000000..58694d0
--- /dev/null
+++ b/examples/basyx.grafana/stop.bat
@@ -0,0 +1 @@
+docker-compose down
\ No newline at end of file
diff --git a/examples/basyx.grafana/stop.sh b/examples/basyx.grafana/stop.sh
new file mode 100644
index 0000000..f5139e2
--- /dev/null
+++ b/examples/basyx.grafana/stop.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose down
\ No newline at end of file
diff --git a/examples/basyx.nodered/.gitignore b/examples/basyx.nodered/.gitignore
new file mode 100644
index 0000000..a52c20a
--- /dev/null
+++ b/examples/basyx.nodered/.gitignore
@@ -0,0 +1 @@
+/mosquitto/mosquitto.log
\ No newline at end of file
diff --git a/examples/basyx.nodered/Dockerfile b/examples/basyx.nodered/Dockerfile
new file mode 100644
index 0000000..4ccce8f
--- /dev/null
+++ b/examples/basyx.nodered/Dockerfile
@@ -0,0 +1,17 @@
+FROM nodered/node-red
+USER root
+
+# Copy package.json to the WORKDIR so npm builds all
+# of your added nodes modules for Node-RED
+COPY package.json .
+COPY ./node-red-contrib-aas-connect ./node-red-contrib-aas-connect
+RUN npm install --unsafe-perm --no-update-notifier --no-fund --only=production --quiet
+RUN npm install ./node-red-contrib-aas-connect
+
+# Copy _your_ Node-RED project files into place
+# NOTE: This will only work if you DO NOT later mount /data as an external volume.
+#       If you need to use an external volume for persistence then
+#       copy your settings and flows files to that volume instead.
+COPY settings.js /data/settings.js
+# COPY flows_cred.json /data/flows_cred.json
+COPY flows.json /data/flows.json
\ No newline at end of file
diff --git a/examples/basyx.nodered/build.bat b/examples/basyx.nodered/build.bat
new file mode 100644
index 0000000..6e3726f
--- /dev/null
+++ b/examples/basyx.nodered/build.bat
@@ -0,0 +1 @@
+docker build -t basyx/node-red:0.1.0-SNAPSHOT .
\ No newline at end of file
diff --git a/examples/basyx.nodered/build.sh b/examples/basyx.nodered/build.sh
new file mode 100644
index 0000000..ce0a3c0
--- /dev/null
+++ b/examples/basyx.nodered/build.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker build -t basyx/node-red:0.1.0-SNAPSHOT .
\ No newline at end of file
diff --git a/examples/basyx.nodered/docker-compose.yml b/examples/basyx.nodered/docker-compose.yml
new file mode 100644
index 0000000..eade085
--- /dev/null
+++ b/examples/basyx.nodered/docker-compose.yml
@@ -0,0 +1,41 @@
+version: '3'
+services:
+
+  registry:
+    image: basyx/registry:0.1.0-SNAPSHOT
+    container_name: dashboard-registry
+    ports:
+      - 4000:4000
+
+  dashboard-aas:
+    image: basyx/dashboard-aas:0.1.0-SNAPSHOT
+    container_name: dashboard-aas
+    environment:
+      - BaSyxDashboardSubmodel_Min=15
+#      - BaSyxDashboardSubmodel_Max=30
+    ports:
+      - 6400:6400
+
+  aas-wrapper:
+    image: basyx/aas-wrapper:0.1.0-SNAPSHOT
+    container_name: aas-wrapper
+    ports:
+      - 6500:6500
+
+  node-red:
+    image: basyx/node-red:0.1.0
+    container_name: node-red
+    ports:
+      - 1880:1880
+    volumes:
+      - ./node-red:/data
+
+  mosquitto:
+    image: eclipse-mosquitto:latest
+    container_name: mosquitto
+    ports:
+      - 1883:1883
+      - 9001:9001
+    volumes:
+      - ./mosquitto/config:/mosquitto/config
+      - ./mosquitto/log:/mosquitto/log
\ No newline at end of file
diff --git a/examples/basyx.nodered/flows.json b/examples/basyx.nodered/flows.json
new file mode 100644
index 0000000..0e22486
--- /dev/null
+++ b/examples/basyx.nodered/flows.json
@@ -0,0 +1 @@
+[{"id":"ac89e902.a48598","type":"tab","label":"AAS Temperature","disabled":false,"info":""},{"id":"91383a96.5b2e48","type":"tab","label":"Test","disabled":false,"info":""},{"id":"1b4daff8.52358","type":"mqtt-broker","z":"","name":"Streamsheets Mosquitto","broker":"http://streamsheets","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"2289cf21.0a21b","type":"inject","z":"ac89e902.a48598","name":"Start","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":120,"wires":[["c3659321.46995"]]},{"id":"c3659321.46995","type":"get-aas-property","z":"ac89e902.a48598","name":"Get Temperature","property":"temp","period":1,"x":270,"y":120,"wires":[["a56bd8e1.1777c8","2c13d59c.208cea","8c41e115.ac913"]]},{"id":"4e72f0db.c2a7a","type":"inject","z":"91383a96.5b2e48","name":"Data","props":[{"p":"values","v":"[22.344,23.434,24.342,21.098]","vt":"json"},{"p":"timestamp","v":"[121323,2112231,321331,321321]","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":140,"y":100,"wires":[["a53d7930.6109f8","4a734a5f.b22314","ab2d648a.1767f8"]]},{"id":"a53d7930.6109f8","type":"debug","z":"91383a96.5b2e48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":250,"y":240,"wires":[]},{"id":"4a734a5f.b22314","type":"function","z":"91383a96.5b2e48","name":"Calculate Average","func":"msg.avg = msg.values.reduce((a,b) => a + b, 0) / msg.values.length;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":450,"y":120,"wires":[["6b28c27b.5547bc"]]},{"id":"6b28c27b.5547bc","type":"debug","z":"91383a96.5b2e48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":710,"y":120,"wires":[]},{"id":"ab2d648a.1767f8","type":"function","z":"91383a96.5b2e48","name":"Calculate Fahrenheit","func":"msg.fahrenheit = msg.values.map(v => v * 1.8 + 32);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":460,"y":180,"wires":[["5e614070.a223f"]]},{"id":"5e614070.a223f","type":"debug","z":"91383a96.5b2e48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":710,"y":180,"wires":[]},{"id":"e733d05.63a9c3","type":"iot-datasource","z":"ac89e902.a48598","name":"Temperature Datasource","tstampField":"tstamp","dataField":"data","disableDiscover":false,"x":730,"y":240,"wires":[[]]},{"id":"8e627da8.65b74","type":"mqtt out","z":"ac89e902.a48598","name":"MQTT Avg Temp Publisher","topic":"temperature/average","qos":"","retain":"","broker":"1b4daff8.52358","x":740,"y":120,"wires":[]},{"id":"7aa9e937.6575c8","type":"mqtt in","z":"ac89e902.a48598","name":"MQTT Avg Temp Consumer","topic":"temperature/average","qos":"2","datatype":"json","broker":"1b4daff8.52358","x":160,"y":360,"wires":[["f96c72b.3be659"]]},{"id":"f96c72b.3be659","type":"debug","z":"ac89e902.a48598","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.average","targetType":"msg","statusVal":"","statusType":"auto","x":420,"y":360,"wires":[]},{"id":"a56bd8e1.1777c8","type":"function","z":"ac89e902.a48598","name":"Calculate Average","func":"const payload = msg.payload;\nlet average = payload.data.reduce((a,b) => a + b, 0) / payload.data.length;\npayload.average = average;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":490,"y":120,"wires":[["8e627da8.65b74"]]},{"id":"2c13d59c.208cea","type":"function","z":"ac89e902.a48598","name":"Calculate Fahrenheit","func":"const payload = msg.payload;\nlet fahrenheit = payload.data.map(v => v * 1.8 + 32);\npayload.fahrenheit = fahrenheit;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":500,"y":180,"wires":[["a3733cf8.97468"]]},{"id":"a3733cf8.97468","type":"mqtt out","z":"ac89e902.a48598","name":"MQTT Fahrenheit Temp Publisher","topic":"temperature/fahrenheit","qos":"","retain":"","broker":"1b4daff8.52358","x":760,"y":180,"wires":[]},{"id":"8c41e115.ac913","type":"function","z":"ac89e902.a48598","name":"Get most recent","func":"msg.payload.tstamp = new Date(msg.payload.tstamp.pop()).getTime();\nmsg.payload.data = msg.payload.data.pop();\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":480,"y":240,"wires":[["e733d05.63a9c3"]]}]
\ No newline at end of file
diff --git a/examples/basyx.nodered/mosquitto/config/mosquitto.conf b/examples/basyx.nodered/mosquitto/config/mosquitto.conf
new file mode 100644
index 0000000..9bf5429
--- /dev/null
+++ b/examples/basyx.nodered/mosquitto/config/mosquitto.conf
@@ -0,0 +1,988 @@
+# Config file for mosquitto
+#
+# See mosquitto.conf(5) for more information.
+#
+# Default values are shown, uncomment to change.
+#
+# Use the # character to indicate a comment, but only if it is the
+# very first character on the line.
+
+# =================================================================
+# General configuration
+# =================================================================
+
+# Use per listener security settings.
+#
+# It is recommended this option be set before any other options.
+#
+# If this option is set to true, then all authentication and access control
+# options are controlled on a per listener basis. The following options are
+# affected:
+#
+# password_file acl_file psk_file auth_plugin auth_opt_* allow_anonymous
+# auto_id_prefix allow_zero_length_clientid
+#
+# Note that if set to true, then a durable client (i.e. with clean session set
+# to false) that has disconnected will use the ACL settings defined for the
+# listener that it was most recently connected to.
+#
+# The default behaviour is for this to be set to false, which maintains the
+# setting behaviour from previous versions of mosquitto.
+#per_listener_settings false
+
+
+# If a client is subscribed to multiple subscriptions that overlap, e.g. foo/#
+# and foo/+/baz , then MQTT expects that when the broker receives a message on
+# a topic that matches both subscriptions, such as foo/bar/baz, then the client
+# should only receive the message once.
+# Mosquitto keeps track of which clients a message has been sent to in order to
+# meet this requirement. The allow_duplicate_messages option allows this
+# behaviour to be disabled, which may be useful if you have a large number of
+# clients subscribed to the same set of topics and are very concerned about
+# minimising memory usage.
+# It can be safely set to true if you know in advance that your clients will
+# never have overlapping subscriptions, otherwise your clients must be able to
+# correctly deal with duplicate messages even when then have QoS=2.
+#allow_duplicate_messages false
+
+# This option controls whether a client is allowed to connect with a zero
+# length client id or not. This option only affects clients using MQTT v3.1.1
+# and later. If set to false, clients connecting with a zero length client id
+# are disconnected. If set to true, clients will be allocated a client id by
+# the broker. This means it is only useful for clients with clean session set
+# to true.
+#allow_zero_length_clientid true
+
+# If allow_zero_length_clientid is true, this option allows you to set a prefix
+# to automatically generated client ids to aid visibility in logs.
+# Defaults to 'auto-'
+#auto_id_prefix auto-
+
+# This option affects the scenario when a client subscribes to a topic that has
+# retained messages. It is possible that the client that published the retained
+# message to the topic had access at the time they published, but that access
+# has been subsequently removed. If check_retain_source is set to true, the
+# default, the source of a retained message will be checked for access rights
+# before it is republished. When set to false, no check will be made and the
+# retained message will always be published. This affects all listeners.
+#check_retain_source true
+
+# QoS 1 and 2 messages will be allowed inflight per client until this limit
+# is exceeded.  Defaults to 0. (No maximum)
+# See also max_inflight_messages
+#max_inflight_bytes 0
+
+# The maximum number of QoS 1 and 2 messages currently inflight per
+# client.
+# This includes messages that are partway through handshakes and
+# those that are being retried. Defaults to 20. Set to 0 for no
+# maximum. Setting to 1 will guarantee in-order delivery of QoS 1
+# and 2 messages.
+#max_inflight_messages 20
+
+# For MQTT v5 clients, it is possible to have the server send a "server
+# keepalive" value that will override the keepalive value set by the client.
+# This is intended to be used as a mechanism to say that the server will
+# disconnect the client earlier than it anticipated, and that the client should
+# use the new keepalive value. The max_keepalive option allows you to specify
+# that clients may only connect with keepalive less than or equal to this
+# value, otherwise they will be sent a server keepalive telling them to use
+# max_keepalive. This only applies to MQTT v5 clients. The maximum value
+# allowable is 65535. Do not set below 10.
+#max_keepalive 65535
+
+# For MQTT v5 clients, it is possible to have the server send a "maximum packet
+# size" value that will instruct the client it will not accept MQTT packets
+# with size greater than max_packet_size bytes. This applies to the full MQTT
+# packet, not just the payload. Setting this option to a positive value will
+# set the maximum packet size to that number of bytes. If a client sends a
+# packet which is larger than this value, it will be disconnected. This applies
+# to all clients regardless of the protocol version they are using, but v3.1.1
+# and earlier clients will of course not have received the maximum packet size
+# information. Defaults to no limit. Setting below 20 bytes is forbidden
+# because it is likely to interfere with ordinary client operation, even with
+# very small payloads.
+#max_packet_size 0
+
+# QoS 1 and 2 messages above those currently in-flight will be queued per
+# client until this limit is exceeded.  Defaults to 0. (No maximum)
+# See also max_queued_messages.
+# If both max_queued_messages and max_queued_bytes are specified, packets will
+# be queued until the first limit is reached.
+#max_queued_bytes 0
+
+# The maximum number of QoS 1 and 2 messages to hold in a queue per client
+# above those that are currently in-flight.  Defaults to 100. Set
+# to 0 for no maximum (not recommended).
+# See also queue_qos0_messages.
+# See also max_queued_bytes.
+#max_queued_messages 100
+#
+# This option sets the maximum number of heap memory bytes that the broker will
+# allocate, and hence sets a hard limit on memory use by the broker.  Memory
+# requests that exceed this value will be denied. The effect will vary
+# depending on what has been denied. If an incoming message is being processed,
+# then the message will be dropped and the publishing client will be
+# disconnected. If an outgoing message is being sent, then the individual
+# message will be dropped and the receiving client will be disconnected.
+# Defaults to no limit.
+#memory_limit 0
+
+# This option sets the maximum publish payload size that the broker will allow.
+# Received messages that exceed this size will not be accepted by the broker.
+# The default value is 0, which means that all valid MQTT messages are
+# accepted. MQTT imposes a maximum payload size of 268435455 bytes.
+#message_size_limit 0
+
+# This option allows persistent clients (those with clean session set to false)
+# to be removed if they do not reconnect within a certain time frame.
+#
+# This is a non-standard option in MQTT V3.1 but allowed in MQTT v3.1.1.
+#
+# Badly designed clients may set clean session to false whilst using a randomly
+# generated client id. This leads to persistent clients that will never
+# reconnect. This option allows these clients to be removed.
+#
+# The expiration period should be an integer followed by one of h d w m y for
+# hour, day, week, month and year respectively. For example
+#
+# persistent_client_expiration 2m
+# persistent_client_expiration 14d
+# persistent_client_expiration 1y
+#
+# The default if not set is to never expire persistent clients.
+#persistent_client_expiration
+
+# Write process id to a file. Default is a blank string which means
+# a pid file shouldn't be written.
+# This should be set to /var/run/mosquitto.pid if mosquitto is
+# being run automatically on boot with an init script and
+# start-stop-daemon or similar.
+#pid_file
+
+# Set to true to queue messages with QoS 0 when a persistent client is
+# disconnected. These messages are included in the limit imposed by
+# max_queued_messages and max_queued_bytes
+# Defaults to false.
+# This is a non-standard option for the MQTT v3.1 spec but is allowed in
+# v3.1.1.
+#queue_qos0_messages false
+
+# Set to false to disable retained message support. If a client publishes a
+# message with the retain bit set, it will be disconnected if this is set to
+# false.
+#retain_available true
+
+# Disable Nagle's algorithm on client sockets. This has the effect of reducing
+# latency of individual messages at the potential cost of increasing the number
+# of packets being sent.
+#set_tcp_nodelay false
+
+# Time in seconds between updates of the $SYS tree.
+# Set to 0 to disable the publishing of the $SYS tree.
+#sys_interval 10
+
+# The MQTT specification requires that the QoS of a message delivered to a
+# subscriber is never upgraded to match the QoS of the subscription. Enabling
+# this option changes this behaviour. If upgrade_outgoing_qos is set true,
+# messages sent to a subscriber will always match the QoS of its subscription.
+# This is a non-standard option explicitly disallowed by the spec.
+#upgrade_outgoing_qos false
+
+# When run as root, drop privileges to this user and its primary
+# group.
+# Set to root to stay as root, but this is not recommended.
+# If run as a non-root user, this setting has no effect.
+# Note that on Windows this has no effect and so mosquitto should
+# be started by the user you wish it to run as.
+#user mosquitto
+
+# =================================================================
+# Default listener
+# =================================================================
+
+# IP address/hostname to bind the default listener to. If not
+# given, the default listener will not be bound to a specific
+# address and so will be accessible to all network interfaces.
+# bind_address ip-address/host name
+#bind_address
+
+# Port to use for the default listener.
+#port 1883
+
+# Bind the listener to a specific interface. This is similar to
+# bind_address above but is useful when an interface has multiple addresses or
+# the address may change. It is valid to use this with the bind_address option,
+# but take care that the interface you are binding to contains the address you
+# are binding to, otherwise you will not be able to connect.
+# Example: bind_interface eth0
+#bind_interface
+
+# When a listener is using the websockets protocol, it is possible to serve
+# http data as well. Set http_dir to a directory which contains the files you
+# wish to serve. If this option is not specified, then no normal http
+# connections will be possible.
+#http_dir
+
+# The maximum number of client connections to allow. This is
+# a per listener setting.
+# Default is -1, which means unlimited connections.
+# Note that other process limits mean that unlimited connections
+# are not really possible. Typically the default maximum number of
+# connections possible is around 1024.
+#max_connections -1
+
+# Choose the protocol to use when listening.
+# This can be either mqtt or websockets.
+# Websockets support is currently disabled by default at compile time.
+# Certificate based TLS may be used with websockets, except that
+# only the cafile, certfile, keyfile and ciphers options are supported.
+#protocol mqtt
+
+# Set use_username_as_clientid to true to replace the clientid that a client
+# connected with with its username. This allows authentication to be tied to
+# the clientid, which means that it is possible to prevent one client
+# disconnecting another by using the same clientid.
+# If a client connects with no username it will be disconnected as not
+# authorised when this option is set to true.
+# Do not use in conjunction with clientid_prefixes.
+# See also use_identity_as_username.
+#use_username_as_clientid
+
+# -----------------------------------------------------------------
+# Certificate based SSL/TLS support
+# -----------------------------------------------------------------
+# The following options can be used to enable SSL/TLS support for
+# this listener. Note that the recommended port for MQTT over TLS
+# is 8883, but this must be set manually.
+#
+# See also the mosquitto-tls man page.
+
+# At least one of cafile or capath must be defined. They both
+# define methods of accessing the PEM encoded Certificate
+# Authority certificates that have signed your server certificate
+# and that you wish to trust.
+# cafile defines the path to a file containing the CA certificates.
+# capath defines a directory that will be searched for files
+# containing the CA certificates. For capath to work correctly, the
+# certificate files must have ".crt" as the file ending and you must run
+# "openssl rehash <path to capath>" each time you add/remove a certificate.
+#cafile
+#capath
+
+# Path to the PEM encoded server certificate.
+#certfile
+
+# Path to the PEM encoded keyfile.
+#keyfile
+
+
+# If you have require_certificate set to true, you can create a certificate
+# revocation list file to revoke access to particular client certificates. If
+# you have done this, use crlfile to point to the PEM encoded revocation file.
+#crlfile
+
+# If you wish to control which encryption ciphers are used, use the ciphers
+# option. The list of available ciphers can be obtained using the "openssl
+# ciphers" command and should be provided in the same format as the output of
+# that command.
+# If unset defaults to DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2:@STRENGTH
+#ciphers DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2:@STRENGTH
+
+# To allow the use of ephemeral DH key exchange, which provides forward
+# security, the listener must load DH parameters. This can be specified with
+# the dhparamfile option. The dhparamfile can be generated with the command
+# e.g. "openssl dhparam -out dhparam.pem 2048"
+#dhparamfile
+
+# By default a TLS enabled listener will operate in a similar fashion to a
+# https enabled web server, in that the server has a certificate signed by a CA
+# and the client will verify that it is a trusted certificate. The overall aim
+# is encryption of the network traffic. By setting require_certificate to true,
+# the client must provide a valid certificate in order for the network
+# connection to proceed. This allows access to the broker to be controlled
+# outside of the mechanisms provided by MQTT.
+#require_certificate false
+
+# This option defines the version of the TLS protocol to use for this listener.
+# The default value allows all of v1.3, v1.2 and v1.1. The valid values are
+# tlsv1.3 tlsv1.2 and tlsv1.1.
+#tls_version
+
+# If require_certificate is true, you may set use_identity_as_username to true
+# to use the CN value from the client certificate as a username. If this is
+# true, the password_file option will not be used for this listener.
+# This takes priority over use_subject_as_username.
+# See also use_subject_as_username.
+#use_identity_as_username false
+
+# If require_certificate is true, you may set use_subject_as_username to true
+# to use the complete subject value from the client certificate as a username.
+# If this is true, the password_file option will not be used for this listener.
+# See also use_identity_as_username
+#use_subject_as_username false
+
+# -----------------------------------------------------------------
+# Pre-shared-key based SSL/TLS support
+# -----------------------------------------------------------------
+# The following options can be used to enable PSK based SSL/TLS support for
+# this listener. Note that the recommended port for MQTT over TLS is 8883, but
+# this must be set manually.
+#
+# See also the mosquitto-tls man page and the "Certificate based SSL/TLS
+# support" section. Only one of certificate or PSK encryption support can be
+# enabled for any listener.
+
+# The psk_hint option enables pre-shared-key support for this listener and also
+# acts as an identifier for this listener. The hint is sent to clients and may
+# be used locally to aid authentication. The hint is a free form string that
+# doesn't have much meaning in itself, so feel free to be creative.
+# If this option is provided, see psk_file to define the pre-shared keys to be
+# used or create a security plugin to handle them.
+#psk_hint
+
+# When using PSK, the encryption ciphers used will be chosen from the list of
+# available PSK ciphers. If you want to control which ciphers are available,
+# use the "ciphers" option.  The list of available ciphers can be obtained
+# using the "openssl ciphers" command and should be provided in the same format
+# as the output of that command.
+#ciphers
+
+# Set use_identity_as_username to have the psk identity sent by the client used
+# as its username. Authentication will be carried out using the PSK rather than
+# the MQTT username/password and so password_file will not be used for this
+# listener.
+#use_identity_as_username false
+
+
+# =================================================================
+# Extra listeners
+# =================================================================
+
+# Listen on a port/ip address combination. By using this variable
+# multiple times, mosquitto can listen on more than one port. If
+# this variable is used and neither bind_address nor port given,
+# then the default listener will not be started.
+# The port number to listen on must be given. Optionally, an ip
+# address or host name may be supplied as a second argument. In
+# this case, mosquitto will attempt to bind the listener to that
+# address and so restrict access to the associated network and
+# interface. By default, mosquitto will listen on all interfaces.
+# Note that for a websockets listener it is not possible to bind to a host
+# name.
+# listener port-number [ip address/host name]
+#listener
+
+# Bind the listener to a specific interface. This is similar to
+# the [ip address/host name] part of the listener definition, but is useful
+# when an interface has multiple addresses or the address may change. It is
+# valid to use this with the [ip address/host name] part of the listener
+# definition, but take care that the interface you are binding to contains the
+# address you are binding to, otherwise you will not be able to connect.
+# Only available on Linux and requires elevated privileges.
+#
+# Example: bind_interface eth0
+#bind_interface
+
+# When a listener is using the websockets protocol, it is possible to serve
+# http data as well. Set http_dir to a directory which contains the files you
+# wish to serve. If this option is not specified, then no normal http
+# connections will be possible.
+#http_dir
+
+# The maximum number of client connections to allow. This is
+# a per listener setting.
+# Default is -1, which means unlimited connections.
+# Note that other process limits mean that unlimited connections
+# are not really possible. Typically the default maximum number of
+# connections possible is around 1024.
+#max_connections -1
+
+# The listener can be restricted to operating within a topic hierarchy using
+# the mount_point option. This is achieved be prefixing the mount_point string
+# to all topics for any clients connected to this listener. This prefixing only
+# happens internally to the broker; the client will not see the prefix.
+#mount_point
+
+# Choose the protocol to use when listening.
+# This can be either mqtt or websockets.
+# Certificate based TLS may be used with websockets, except that only the
+# cafile, certfile, keyfile and ciphers options are supported.
+#protocol mqtt
+
+# Set use_username_as_clientid to true to replace the clientid that a client
+# connected with with its username. This allows authentication to be tied to
+# the clientid, which means that it is possible to prevent one client
+# disconnecting another by using the same clientid.
+# If a client connects with no username it will be disconnected as not
+# authorised when this option is set to true.
+# Do not use in conjunction with clientid_prefixes.
+# See also use_identity_as_username.
+#use_username_as_clientid
+
+# Change the websockets headers size. This is a global option, it is not
+# possible to set per listener. This option sets the size of the buffer used in
+# the libwebsockets library when reading HTTP headers. If you are passing large
+# header data such as cookies then you may need to increase this value. If left
+# unset, or set to 0, then the default of 1024 bytes will be used.
+#websockets_headers_size
+
+# -----------------------------------------------------------------
+# Certificate based SSL/TLS support
+# -----------------------------------------------------------------
+# The following options can be used to enable certificate based SSL/TLS support
+# for this listener. Note that the recommended port for MQTT over TLS is 8883,
+# but this must be set manually.
+#
+# See also the mosquitto-tls man page and the "Pre-shared-key based SSL/TLS
+# support" section. Only one of certificate or PSK encryption support can be
+# enabled for any listener.
+
+# At least one of cafile or capath must be defined to enable certificate based
+# TLS encryption. They both define methods of accessing the PEM encoded
+# Certificate Authority certificates that have signed your server certificate
+# and that you wish to trust.
+# cafile defines the path to a file containing the CA certificates.
+# capath defines a directory that will be searched for files
+# containing the CA certificates. For capath to work correctly, the
+# certificate files must have ".crt" as the file ending and you must run
+# "openssl rehash <path to capath>" each time you add/remove a certificate.
+#cafile
+#capath
+
+# Path to the PEM encoded server certificate.
+#certfile
+
+# Path to the PEM encoded keyfile.
+#keyfile
+
+
+# If you wish to control which encryption ciphers are used, use the ciphers
+# option. The list of available ciphers can be optained using the "openssl
+# ciphers" command and should be provided in the same format as the output of
+# that command.
+#ciphers
+
+# If you have require_certificate set to true, you can create a certificate
+# revocation list file to revoke access to particular client certificates. If
+# you have done this, use crlfile to point to the PEM encoded revocation file.
+#crlfile
+
+# To allow the use of ephemeral DH key exchange, which provides forward
+# security, the listener must load DH parameters. This can be specified with
+# the dhparamfile option. The dhparamfile can be generated with the command
+# e.g. "openssl dhparam -out dhparam.pem 2048"
+#dhparamfile
+
+# By default an TLS enabled listener will operate in a similar fashion to a
+# https enabled web server, in that the server has a certificate signed by a CA
+# and the client will verify that it is a trusted certificate. The overall aim
+# is encryption of the network traffic. By setting require_certificate to true,
+# the client must provide a valid certificate in order for the network
+# connection to proceed. This allows access to the broker to be controlled
+# outside of the mechanisms provided by MQTT.
+#require_certificate false
+
+# If require_certificate is true, you may set use_identity_as_username to true
+# to use the CN value from the client certificate as a username. If this is
+# true, the password_file option will not be used for this listener.
+#use_identity_as_username false
+
+# -----------------------------------------------------------------
+# Pre-shared-key based SSL/TLS support
+# -----------------------------------------------------------------
+# The following options can be used to enable PSK based SSL/TLS support for
+# this listener. Note that the recommended port for MQTT over TLS is 8883, but
+# this must be set manually.
+#
+# See also the mosquitto-tls man page and the "Certificate based SSL/TLS
+# support" section. Only one of certificate or PSK encryption support can be
+# enabled for any listener.
+
+# The psk_hint option enables pre-shared-key support for this listener and also
+# acts as an identifier for this listener. The hint is sent to clients and may
+# be used locally to aid authentication. The hint is a free form string that
+# doesn't have much meaning in itself, so feel free to be creative.
+# If this option is provided, see psk_file to define the pre-shared keys to be
+# used or create a security plugin to handle them.
+#psk_hint
+
+# When using PSK, the encryption ciphers used will be chosen from the list of
+# available PSK ciphers. If you want to control which ciphers are available,
+# use the "ciphers" option.  The list of available ciphers can be optained
+# using the "openssl ciphers" command and should be provided in the same format
+# as the output of that command.
+#ciphers
+
+# Set use_identity_as_username to have the psk identity sent by the client used
+# as its username. Authentication will be carried out using the PSK rather than
+# the MQTT username/password and so password_file will not be used for this
+# listener.
+#use_identity_as_username false
+
+
+# =================================================================
+# Persistence
+# =================================================================
+
+# If persistence is enabled, save the in-memory database to disk
+# every autosave_interval seconds. If set to 0, the persistence
+# database will only be written when mosquitto exits. See also
+# autosave_on_changes.
+# Note that writing of the persistence database can be forced by
+# sending mosquitto a SIGUSR1 signal.
+#autosave_interval 1800
+
+# If true, mosquitto will count the number of subscription changes, retained
+# messages received and queued messages and if the total exceeds
+# autosave_interval then the in-memory database will be saved to disk.
+# If false, mosquitto will save the in-memory database to disk by treating
+# autosave_interval as a time in seconds.
+#autosave_on_changes false
+
+# Save persistent message data to disk (true/false).
+# This saves information about all messages, including
+# subscriptions, currently in-flight messages and retained
+# messages.
+# retained_persistence is a synonym for this option.
+#persistence false
+
+# The filename to use for the persistent database, not including
+# the path.
+#persistence_file mosquitto.db
+
+# Location for persistent database. Must include trailing /
+# Default is an empty string (current directory).
+# Set to e.g. /var/lib/mosquitto/ if running as a proper service on Linux or
+# similar.
+#persistence_location
+
+
+# =================================================================
+# Logging
+# =================================================================
+
+# Places to log to. Use multiple log_dest lines for multiple
+# logging destinations.
+# Possible destinations are: stdout stderr syslog topic file
+#
+# stdout and stderr log to the console on the named output.
+#
+# syslog uses the userspace syslog facility which usually ends up
+# in /var/log/messages or similar.
+#
+# topic logs to the broker topic '$SYS/broker/log/<severity>',
+# where severity is one of D, E, W, N, I, M which are debug, error,
+# warning, notice, information and message. Message type severity is used by
+# the subscribe/unsubscribe log_types and publishes log messages to
+# $SYS/broker/log/M/susbcribe or $SYS/broker/log/M/unsubscribe.
+#
+# The file destination requires an additional parameter which is the file to be
+# logged to, e.g. "log_dest file /var/log/mosquitto.log". The file will be
+# closed and reopened when the broker receives a HUP signal. Only a single file
+# destination may be configured.
+#
+# Note that if the broker is running as a Windows service it will default to
+# "log_dest none" and neither stdout nor stderr logging is available.
+# Use "log_dest none" if you wish to disable logging.
+log_dest file /mosquitto/log/mosquitto.log
+
+# Types of messages to log. Use multiple log_type lines for logging
+# multiple types of messages.
+# Possible types are: debug, error, warning, notice, information,
+# none, subscribe, unsubscribe, websockets, all.
+# Note that debug type messages are for decoding the incoming/outgoing
+# network packets. They are not logged in "topics".
+#log_type error
+#log_type warning
+#log_type notice
+#log_type information
+
+
+# If set to true, client connection and disconnection messages will be included
+# in the log.
+#connection_messages true
+
+# If using syslog logging (not on Windows), messages will be logged to the
+# "daemon" facility by default. Use the log_facility option to choose which of
+# local0 to local7 to log to instead. The option value should be an integer
+# value, e.g. "log_facility 5" to use local5.
+#log_facility
+
+# If set to true, add a timestamp value to each log message.
+#log_timestamp true
+
+# Set the format of the log timestamp. If left unset, this is the number of
+# seconds since the Unix epoch.
+# This is a free text string which will be passed to the strftime function. To
+# get an ISO 8601 datetime, for example:
+# log_timestamp_format %Y-%m-%dT%H:%M:%S
+#log_timestamp_format
+
+# Change the websockets logging level. This is a global option, it is not
+# possible to set per listener. This is an integer that is interpreted by
+# libwebsockets as a bit mask for its lws_log_levels enum. See the
+# libwebsockets documentation for more details. "log_type websockets" must also
+# be enabled.
+#websockets_log_level 0
+
+
+# =================================================================
+# Security
+# =================================================================
+
+# If set, only clients that have a matching prefix on their
+# clientid will be allowed to connect to the broker. By default,
+# all clients may connect.
+# For example, setting "secure-" here would mean a client "secure-
+# client" could connect but another with clientid "mqtt" couldn't.
+#clientid_prefixes
+
+# Boolean value that determines whether clients that connect
+# without providing a username are allowed to connect. If set to
+# false then a password file should be created (see the
+# password_file option) to control authenticated client access.
+#
+# Defaults to true if no other security options are set. If `password_file` or
+# `psk_file` is set, or if an authentication plugin is loaded which implements
+# username/password or TLS-PSK checks, then `allow_anonymous` defaults to
+# false.
+#
+#allow_anonymous true
+
+# -----------------------------------------------------------------
+# Default authentication and topic access control
+# -----------------------------------------------------------------
+
+# Control access to the broker using a password file. This file can be
+# generated using the mosquitto_passwd utility. If TLS support is not compiled
+# into mosquitto (it is recommended that TLS support should be included) then
+# plain text passwords are used, in which case the file should be a text file
+# with lines in the format:
+# username:password
+# The password (and colon) may be omitted if desired, although this
+# offers very little in the way of security.
+#
+# See the TLS client require_certificate and use_identity_as_username options
+# for alternative authentication options. If an auth_plugin is used as well as
+# password_file, the auth_plugin check will be made first.
+#password_file
+
+# Access may also be controlled using a pre-shared-key file. This requires
+# TLS-PSK support and a listener configured to use it. The file should be text
+# lines in the format:
+# identity:key
+# The key should be in hexadecimal format without a leading "0x".
+# If an auth_plugin is used as well, the auth_plugin check will be made first.
+#psk_file
+
+# Control access to topics on the broker using an access control list
+# file. If this parameter is defined then only the topics listed will
+# have access.
+# If the first character of a line of the ACL file is a # it is treated as a
+# comment.
+# Topic access is added with lines of the format:
+#
+# topic [read|write|readwrite] <topic>
+#
+# The access type is controlled using "read", "write" or "readwrite". This
+# parameter is optional (unless <topic> contains a space character) - if not
+# given then the access is read/write.  <topic> can contain the + or #
+# wildcards as in subscriptions.
+#
+# The first set of topics are applied to anonymous clients, assuming
+# allow_anonymous is true. User specific topic ACLs are added after a
+# user line as follows:
+#
+# user <username>
+#
+# The username referred to here is the same as in password_file. It is
+# not the clientid.
+#
+#
+# If is also possible to define ACLs based on pattern substitution within the
+# topic. The patterns available for substition are:
+#
+# %c to match the client id of the client
+# %u to match the username of the client
+#
+# The substitution pattern must be the only text for that level of hierarchy.
+#
+# The form is the same as for the topic keyword, but using pattern as the
+# keyword.
+# Pattern ACLs apply to all users even if the "user" keyword has previously
+# been given.
+#
+# If using bridges with usernames and ACLs, connection messages can be allowed
+# with the following pattern:
+# pattern write $SYS/broker/connection/%c/state
+#
+# pattern [read|write|readwrite] <topic>
+#
+# Example:
+#
+# pattern write sensor/%u/data
+#
+# If an auth_plugin is used as well as acl_file, the auth_plugin check will be
+# made first.
+#acl_file
+
+# -----------------------------------------------------------------
+# External authentication and topic access plugin options
+# -----------------------------------------------------------------
+
+# External authentication and access control can be supported with the
+# auth_plugin option. This is a path to a loadable plugin. See also the
+# auth_opt_* options described below.
+#
+# The auth_plugin option can be specified multiple times to load multiple
+# plugins. The plugins will be processed in the order that they are specified
+# here. If the auth_plugin option is specified alongside either of
+# password_file or acl_file then the plugin checks will be made first.
+#
+#auth_plugin
+
+# If the auth_plugin option above is used, define options to pass to the
+# plugin here as described by the plugin instructions. All options named
+# using the format auth_opt_* will be passed to the plugin, for example:
+#
+# auth_opt_db_host
+# auth_opt_db_port
+# auth_opt_db_username
+# auth_opt_db_password
+
+
+# =================================================================
+# Bridges
+# =================================================================
+
+# A bridge is a way of connecting multiple MQTT brokers together.
+# Create a new bridge using the "connection" option as described below. Set
+# options for the bridges using the remaining parameters. You must specify the
+# address and at least one topic to subscribe to.
+#
+# Each connection must have a unique name.
+#
+# The address line may have multiple host address and ports specified. See
+# below in the round_robin description for more details on bridge behaviour if
+# multiple addresses are used. Note that if you use an IPv6 address, then you
+# are required to specify a port.
+#
+# The direction that the topic will be shared can be chosen by
+# specifying out, in or both, where the default value is out.
+# The QoS level of the bridged communication can be specified with the next
+# topic option. The default QoS level is 0, to change the QoS the topic
+# direction must also be given.
+#
+# The local and remote prefix options allow a topic to be remapped when it is
+# bridged to/from the remote broker. This provides the ability to place a topic
+# tree in an appropriate location.
+#
+# For more details see the mosquitto.conf man page.
+#
+# Multiple topics can be specified per connection, but be careful
+# not to create any loops.
+#
+# If you are using bridges with cleansession set to false (the default), then
+# you may get unexpected behaviour from incoming topics if you change what
+# topics you are subscribing to. This is because the remote broker keeps the
+# subscription for the old topic. If you have this problem, connect your bridge
+# with cleansession set to true, then reconnect with cleansession set to false
+# as normal.
+#connection <name>
+#address <host>[:<port>] [<host>[:<port>]]
+#topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]
+
+
+# If a bridge has topics that have "out" direction, the default behaviour is to
+# send an unsubscribe request to the remote broker on that topic. This means
+# that changing a topic direction from "in" to "out" will not keep receiving
+# incoming messages. Sending these unsubscribe requests is not always
+# desirable, setting bridge_attempt_unsubscribe to false will disable sending
+# the unsubscribe request.
+#bridge_attempt_unsubscribe true
+
+# Set the version of the MQTT protocol to use with for this bridge. Can be one
+# of mqttv311 or mqttv11. Defaults to mqttv311.
+#bridge_protocol_version mqttv311
+
+# Set the clean session variable for this bridge.
+# When set to true, when the bridge disconnects for any reason, all
+# messages and subscriptions will be cleaned up on the remote
+# broker. Note that with cleansession set to true, there may be a
+# significant amount of retained messages sent when the bridge
+# reconnects after losing its connection.
+# When set to false, the subscriptions and messages are kept on the
+# remote broker, and delivered when the bridge reconnects.
+#cleansession false
+
+# Set the amount of time a bridge using the lazy start type must be idle before
+# it will be stopped. Defaults to 60 seconds.
+#idle_timeout 60
+
+# Set the keepalive interval for this bridge connection, in
+# seconds.
+#keepalive_interval 60
+
+# Set the clientid to use on the local broker. If not defined, this defaults to
+# 'local.<clientid>'. If you are bridging a broker to itself, it is important
+# that local_clientid and clientid do not match.
+#local_clientid
+
+# If set to true, publish notification messages to the local and remote brokers
+# giving information about the state of the bridge connection. Retained
+# messages are published to the topic $SYS/broker/connection/<clientid>/state
+# unless the notification_topic option is used.
+# If the message is 1 then the connection is active, or 0 if the connection has
+# failed.
+# This uses the last will and testament feature.
+#notifications true
+
+# Choose the topic on which notification messages for this bridge are
+# published. If not set, messages are published on the topic
+# $SYS/broker/connection/<clientid>/state
+#notification_topic
+
+# Set the client id to use on the remote end of this bridge connection. If not
+# defined, this defaults to 'name.hostname' where name is the connection name
+# and hostname is the hostname of this computer.
+# This replaces the old "clientid" option to avoid confusion. "clientid"
+# remains valid for the time being.
+#remote_clientid
+
+# Set the password to use when connecting to a broker that requires
+# authentication. This option is only used if remote_username is also set.
+# This replaces the old "password" option to avoid confusion. "password"
+# remains valid for the time being.
+#remote_password
+
+# Set the username to use when connecting to a broker that requires
+# authentication.
+# This replaces the old "username" option to avoid confusion. "username"
+# remains valid for the time being.
+#remote_username
+
+# Set the amount of time a bridge using the automatic start type will wait
+# until attempting to reconnect.
+# This option can be configured to use a constant delay time in seconds, or to
+# use a backoff mechanism based on "Decorrelated Jitter", which adds a degree
+# of randomness to when the restart occurs.
+#
+# Set a constant timeout of 20 seconds:
+# restart_timeout 20
+#
+# Set backoff with a base (start value) of 10 seconds and a cap (upper limit) of
+# 60 seconds:
+# restart_timeout 10 30
+#
+# Defaults to jitter with a base of 5 and cap of 30
+#restart_timeout 5 30
+
+# If the bridge has more than one address given in the address/addresses
+# configuration, the round_robin option defines the behaviour of the bridge on
+# a failure of the bridge connection. If round_robin is false, the default
+# value, then the first address is treated as the main bridge connection. If
+# the connection fails, the other secondary addresses will be attempted in
+# turn. Whilst connected to a secondary bridge, the bridge will periodically
+# attempt to reconnect to the main bridge until successful.
+# If round_robin is true, then all addresses are treated as equals. If a
+# connection fails, the next address will be tried and if successful will
+# remain connected until it fails
+#round_robin false
+
+# Set the start type of the bridge. This controls how the bridge starts and
+# can be one of three types: automatic, lazy and once. Note that RSMB provides
+# a fourth start type "manual" which isn't currently supported by mosquitto.
+#
+# "automatic" is the default start type and means that the bridge connection
+# will be started automatically when the broker starts and also restarted
+# after a short delay (30 seconds) if the connection fails.
+#
+# Bridges using the "lazy" start type will be started automatically when the
+# number of queued messages exceeds the number set with the "threshold"
+# parameter. It will be stopped automatically after the time set by the
+# "idle_timeout" parameter. Use this start type if you wish the connection to
+# only be active when it is needed.
+#
+# A bridge using the "once" start type will be started automatically when the
+# broker starts but will not be restarted if the connection fails.
+#start_type automatic
+
+# Set the number of messages that need to be queued for a bridge with lazy
+# start type to be restarted. Defaults to 10 messages.
+# Must be less than max_queued_messages.
+#threshold 10
+
+# If try_private is set to true, the bridge will attempt to indicate to the
+# remote broker that it is a bridge not an ordinary client. If successful, this
+# means that loop detection will be more effective and that retained messages
+# will be propagated correctly. Not all brokers support this feature so it may
+# be necessary to set try_private to false if your bridge does not connect
+# properly.
+#try_private true
+
+# -----------------------------------------------------------------
+# Certificate based SSL/TLS support
+# -----------------------------------------------------------------
+# Either bridge_cafile or bridge_capath must be defined to enable TLS support
+# for this bridge.
+# bridge_cafile defines the path to a file containing the
+# Certificate Authority certificates that have signed the remote broker
+# certificate.
+# bridge_capath defines a directory that will be searched for files containing
+# the CA certificates. For bridge_capath to work correctly, the certificate
+# files must have ".crt" as the file ending and you must run "openssl rehash
+# <path to capath>" each time you add/remove a certificate.
+#bridge_cafile
+#bridge_capath
+
+
+# If the remote broker has more than one protocol available on its port, e.g.
+# MQTT and WebSockets, then use bridge_alpn to configure which protocol is
+# requested. Note that WebSockets support for bridges is not yet available.
+#bridge_alpn
+
+# When using certificate based encryption, bridge_insecure disables
+# verification of the server hostname in the server certificate. This can be
+# useful when testing initial server configurations, but makes it possible for
+# a malicious third party to impersonate your server through DNS spoofing, for
+# example. Use this option in testing only. If you need to resort to using this
+# option in a production environment, your setup is at fault and there is no
+# point using encryption.
+#bridge_insecure false
+
+# Path to the PEM encoded client certificate, if required by the remote broker.
+#bridge_certfile
+
+# Path to the PEM encoded client private key, if required by the remote broker.
+#bridge_keyfile
+
+# -----------------------------------------------------------------
+# PSK based SSL/TLS support
+# -----------------------------------------------------------------
+# Pre-shared-key encryption provides an alternative to certificate based
+# encryption. A bridge can be configured to use PSK with the bridge_identity
+# and bridge_psk options. These are the client PSK identity, and pre-shared-key
+# in hexadecimal format with no "0x". Only one of certificate and PSK based
+# encryption can be used on one
+# bridge at once.
+#bridge_identity
+#bridge_psk
+
+
+# =================================================================
+# External config files
+# =================================================================
+
+# External configuration files may be included by using the
+# include_dir option. This defines a directory that will be searched
+# for config files. All files that end in '.conf' will be loaded as
+# a configuration file. It is best to have this as the last option
+# in the main file. This option will only be processed from the main
+# configuration file. The directory specified must not contain the
+# main configuration file.
+# Files within include_dir will be loaded sorted in case-sensitive
+# alphabetical order, with capital letters ordered first. If this option is
+# given multiple times, all of the files from the first instance will be
+# processed before the next instance. See the man page for examples.
+#include_dir
diff --git a/examples/basyx.nodered/node-red-contrib-aas-connect/get-aas-property.html b/examples/basyx.nodered/node-red-contrib-aas-connect/get-aas-property.html
new file mode 100644
index 0000000..540724e
--- /dev/null
+++ b/examples/basyx.nodered/node-red-contrib-aas-connect/get-aas-property.html
@@ -0,0 +1,50 @@
+<script type="text/javascript">
+    RED.nodes.registerType('get-aas-property', {
+        category: 'network',
+        defaults: {
+            name: { value: '' },
+            property: { value: 'temperature', required: true },
+            period: { value: 1, required: true }
+        },
+        inputs: 1,
+        outputs: 1,
+        color: '#C3D6F2',
+        align: 'left',
+        label: function() {
+            return this.name || "Get AAS property";
+        },
+        palettelabel: function() {
+            return this.name || "Get AAS property";
+        },
+        icon: 'logo-BaSys4.png',
+    })
+</script>
+
+<script type="text/html" data-template-name="get-aas-property">
+    <div class="form-row">
+        <label for="node-input-name"><i class="fa fa-tag"></i> Node name</label>
+        <input type="text" id="node-input-name" placeholder="Name">
+    </div>
+    <div class="form-row">
+        <label for="node-input-property"><i class="fa fa-rss"></i> Property</label>
+        <input type="text" id="node-input-property" placeholder="Property">
+    </div>
+    <div class="form-row">
+        <label for="node-input-period">
+            <i class="fa fa-clock-o"></i> Interval <br/><span style="font-size:0.8em">(in seconds)</span>
+        </label>
+        <input type="text" id="node-input-period" placeholder="Interval">
+    </div>
+    <!-- <div class="form-tips"><b>Tip:</b> This is here to help.</div> -->
+</script>
+
+<script type="text/html" data-help-name="get-aas-property">
+    <p>This node monitors (periodically retrives) the value of an AAS property</p>
+    <h3>Outputs</h3>
+    <dl class="message-properties">
+        <dt>payload
+            <span class="property-type">object</span>
+        </dt>
+        <dd> the payload of the message containing the property value (in the 'value' key) and the timestamp (in the 'tstamp' key). </dd>
+    </dl>
+ </script>
\ No newline at end of file
diff --git a/examples/basyx.nodered/node-red-contrib-aas-connect/get-aas-property.js b/examples/basyx.nodered/node-red-contrib-aas-connect/get-aas-property.js
new file mode 100644
index 0000000..09fdd0e
--- /dev/null
+++ b/examples/basyx.nodered/node-red-contrib-aas-connect/get-aas-property.js
@@ -0,0 +1,60 @@
+module.exports = function(RED) {
+
+    const request = require('request');
+
+    function GetAASProperty(config) {
+        let property = config.property || 'temp';
+        let endpoint = `http://aas-wrapper:6500/streamsheets/${property}`;
+        let period = Number(config.period) || 1;
+        let msperiod = period * 1000;
+
+        RED.nodes.createNode(this, config);
+
+        let node = this;
+        let interval;
+        node.on('input', function(msg, send, done) {
+            interval = setInterval(() => {
+                request(endpoint, { json: true }, (err, res, body) => {
+                    if (err) {
+                        node.error(err);
+                        if (done) done(err);
+                        return;
+                    }
+
+                    if (!body.success) {
+                        node.error(body.messages);
+                        if (done) done(body.messages);
+                        return;
+                    }
+
+                    // let mostRecentTimestamp = body.timestamp.pop();
+                    // let mostRecentValue = body.content.pop();
+
+                    let data = {
+                        tstamp: body.timestamp,
+                        data: body.content,
+                    }
+                    
+                    msg.payload = data;
+
+                    // For maximum backwards compatibility, check that send exists.
+                    // If this node is installed in Node-RED 0.x, it will need to
+                    // fallback to using `node.send`
+                    send = send || function() { node.send.apply(node, msg) }
+                    send(msg);
+
+                    if (done) done();
+                });
+            }, msperiod);
+
+        });
+
+        node.on('close', function(done) {
+            clearInterval(interval);
+            if (done) done();
+        });
+
+    }
+
+    RED.nodes.registerType('get-aas-property', GetAASProperty);
+}
\ No newline at end of file
diff --git a/examples/basyx.nodered/node-red-contrib-aas-connect/icons/logo-BaSys4.png b/examples/basyx.nodered/node-red-contrib-aas-connect/icons/logo-BaSys4.png
new file mode 100644
index 0000000..56d0dac
--- /dev/null
+++ b/examples/basyx.nodered/node-red-contrib-aas-connect/icons/logo-BaSys4.png
Binary files differ
diff --git a/examples/basyx.nodered/node-red-contrib-aas-connect/icons/machine.png b/examples/basyx.nodered/node-red-contrib-aas-connect/icons/machine.png
new file mode 100644
index 0000000..56db813
--- /dev/null
+++ b/examples/basyx.nodered/node-red-contrib-aas-connect/icons/machine.png
Binary files differ
diff --git a/examples/basyx.nodered/node-red-contrib-aas-connect/package.json b/examples/basyx.nodered/node-red-contrib-aas-connect/package.json
new file mode 100644
index 0000000..882bb64
--- /dev/null
+++ b/examples/basyx.nodered/node-red-contrib-aas-connect/package.json
@@ -0,0 +1,20 @@
+{
+  "name": "node-red-contrib-aas-connect",
+  "version": "1.0.0",
+  "description": "",
+  "main": "get-aas-property.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "node-red": {
+    "nodes": {
+      "get-aas-property": "get-aas-property.js",
+      "set-aas-property": "set-aas-property.js"
+    }
+  },
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "request": "^2.88.2"
+  }
+}
diff --git a/examples/basyx.nodered/node-red-contrib-aas-connect/set-aas-property.html b/examples/basyx.nodered/node-red-contrib-aas-connect/set-aas-property.html
new file mode 100644
index 0000000..db9b93a
--- /dev/null
+++ b/examples/basyx.nodered/node-red-contrib-aas-connect/set-aas-property.html
@@ -0,0 +1,36 @@
+<script type="text/javascript">
+    RED.nodes.registerType('set-aas-property', {
+        category: 'network',
+        defaults: {
+            name: { value: '' },
+            property: { value: 'temp', required: true },
+        },
+        inputs: 1,
+        outputs: 0,
+        color: '#C3D6F2',
+        align: 'right',
+        label: function() {
+            return this.name || "Set AAS property";
+        },
+        palettelabel: function() {
+            return this.name || "Set AAS property";
+        },
+        icon: 'logo-BaSys4.png',
+    })
+</script>
+
+<script type="text/html" data-template-name="set-aas-property">
+    <div class="form-row">
+        <label for="node-input-name"><i class="fa fa-tag"></i> Node name</label>
+        <input type="text" id="node-input-name" placeholder="Name">
+    </div>
+    <div class="form-row">
+        <label for="node-input-property"><i class="fa fa-rss"></i> Property</label>
+        <input type="text" id="node-input-property" placeholder="Property">
+    </div>
+    <!-- <div class="form-tips"><b>Tip:</b> This is here to help.</div> -->
+</script>
+
+<script type="text/html" data-help-name="set-aas-property">
+    <p>This node sets the value of an AAS property</p>
+ </script>
\ No newline at end of file
diff --git a/examples/basyx.nodered/node-red-contrib-aas-connect/set-aas-property.js b/examples/basyx.nodered/node-red-contrib-aas-connect/set-aas-property.js
new file mode 100644
index 0000000..d8af768
--- /dev/null
+++ b/examples/basyx.nodered/node-red-contrib-aas-connect/set-aas-property.js
@@ -0,0 +1,40 @@
+module.exports = function(RED) {
+
+    const request = require('request');
+
+    function SetAASProperty(config) {
+        let property = config.property || 'temp';
+        let endpoint = `http://aas-wrapper:6500/streamsheets/${property}`;
+
+        RED.nodes.createNode(this, config);
+
+        let node = this;
+        node.on('input', function(msg, send, done) {
+            let newValue = msg.payload;
+
+            request({
+                uri: endpoint,
+                method: 'POST',
+                json: true,
+                body: { value: newValue }
+            }, (err, res, body) => {
+                if (err) {
+                    node.error(err);
+                    if (done) done(err);
+                    return;
+                }
+
+                if (!body.success) {
+                    node.error(body.error);
+                    if (done) done(body.error);
+                    return;
+                }
+
+                if (done) done();
+            });
+        });
+    }
+
+    RED.nodes.registerType('set-aas-property', SetAASProperty);
+
+}
\ No newline at end of file
diff --git a/examples/basyx.nodered/node-red/.config.json b/examples/basyx.nodered/node-red/.config.json
new file mode 100644
index 0000000..c8d13d4
--- /dev/null
+++ b/examples/basyx.nodered/node-red/.config.json
@@ -0,0 +1,456 @@
+{
+ "nodes": {
+  "node-red": {
+   "name": "node-red",
+   "version": "1.1.2",
+   "local": false,
+   "nodes": {
+    "inject": {
+     "name": "inject",
+     "types": [
+      "inject"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/common/20-inject.js"
+    },
+    "debug": {
+     "name": "debug",
+     "types": [
+      "debug"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/common/21-debug.js"
+    },
+    "complete": {
+     "name": "complete",
+     "types": [
+      "complete"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/common/24-complete.js"
+    },
+    "catch": {
+     "name": "catch",
+     "types": [
+      "catch"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/common/25-catch.js"
+    },
+    "status": {
+     "name": "status",
+     "types": [
+      "status"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/common/25-status.js"
+    },
+    "link": {
+     "name": "link",
+     "types": [
+      "link in",
+      "link out"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/common/60-link.js"
+    },
+    "comment": {
+     "name": "comment",
+     "types": [
+      "comment"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/common/90-comment.js"
+    },
+    "unknown": {
+     "name": "unknown",
+     "types": [
+      "unknown"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/common/98-unknown.js"
+    },
+    "function": {
+     "name": "function",
+     "types": [
+      "function"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/function/10-function.js"
+    },
+    "switch": {
+     "name": "switch",
+     "types": [
+      "switch"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/function/10-switch.js"
+    },
+    "change": {
+     "name": "change",
+     "types": [
+      "change"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/function/15-change.js"
+    },
+    "range": {
+     "name": "range",
+     "types": [
+      "range"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/function/16-range.js"
+    },
+    "template": {
+     "name": "template",
+     "types": [
+      "template"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/function/80-template.js"
+    },
+    "delay": {
+     "name": "delay",
+     "types": [
+      "delay"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/function/89-delay.js"
+    },
+    "trigger": {
+     "name": "trigger",
+     "types": [
+      "trigger"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/function/89-trigger.js"
+    },
+    "exec": {
+     "name": "exec",
+     "types": [
+      "exec"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/function/90-exec.js"
+    },
+    "tls": {
+     "name": "tls",
+     "types": [
+      "tls-config"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/network/05-tls.js"
+    },
+    "httpproxy": {
+     "name": "httpproxy",
+     "types": [
+      "http proxy"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/network/06-httpproxy.js"
+    },
+    "mqtt": {
+     "name": "mqtt",
+     "types": [
+      "mqtt in",
+      "mqtt out",
+      "mqtt-broker"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/network/10-mqtt.js"
+    },
+    "httpin": {
+     "name": "httpin",
+     "types": [
+      "http in",
+      "http response"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/network/21-httpin.js"
+    },
+    "httprequest": {
+     "name": "httprequest",
+     "types": [
+      "http request"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/network/21-httprequest.js"
+    },
+    "websocket": {
+     "name": "websocket",
+     "types": [
+      "websocket in",
+      "websocket out",
+      "websocket-listener",
+      "websocket-client"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/network/22-websocket.js"
+    },
+    "tcpin": {
+     "name": "tcpin",
+     "types": [
+      "tcp in",
+      "tcp out",
+      "tcp request"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/network/31-tcpin.js"
+    },
+    "udp": {
+     "name": "udp",
+     "types": [
+      "udp in",
+      "udp out"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/network/32-udp.js"
+    },
+    "CSV": {
+     "name": "CSV",
+     "types": [
+      "csv"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/parsers/70-CSV.js"
+    },
+    "HTML": {
+     "name": "HTML",
+     "types": [
+      "html"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/parsers/70-HTML.js"
+    },
+    "JSON": {
+     "name": "JSON",
+     "types": [
+      "json"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/parsers/70-JSON.js"
+    },
+    "XML": {
+     "name": "XML",
+     "types": [
+      "xml"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/parsers/70-XML.js"
+    },
+    "YAML": {
+     "name": "YAML",
+     "types": [
+      "yaml"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/parsers/70-YAML.js"
+    },
+    "split": {
+     "name": "split",
+     "types": [
+      "split",
+      "join"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/sequence/17-split.js"
+    },
+    "sort": {
+     "name": "sort",
+     "types": [
+      "sort"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/sequence/18-sort.js"
+    },
+    "batch": {
+     "name": "batch",
+     "types": [
+      "batch"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/sequence/19-batch.js"
+    },
+    "file": {
+     "name": "file",
+     "types": [
+      "file",
+      "file in"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/storage/10-file.js"
+    },
+    "watch": {
+     "name": "watch",
+     "types": [
+      "watch"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red",
+     "file": "/usr/src/node-red/node_modules/@node-red/nodes/core/storage/23-watch.js"
+    }
+   }
+  },
+  "node-red-contrib-aas-connect": {
+   "name": "node-red-contrib-aas-connect",
+   "version": "1.0.0",
+   "local": false,
+   "nodes": {
+    "get-aas-property": {
+     "name": "get-aas-property",
+     "types": [
+      "get-aas-property"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red-contrib-aas-connect",
+     "file": "/usr/src/node-red/node_modules/node-red-contrib-aas-connect/get-aas-property.js"
+    },
+    "set-aas-property": {
+     "name": "set-aas-property",
+     "types": [
+      "set-aas-property"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red-contrib-aas-connect",
+     "file": "/usr/src/node-red/node_modules/node-red-contrib-aas-connect/set-aas-property.js"
+    }
+   }
+  },
+  "node-red-contrib-graphs": {
+   "name": "node-red-contrib-graphs",
+   "version": "0.3.5",
+   "local": false,
+   "nodes": {
+    "datasource": {
+     "name": "datasource",
+     "types": [
+      "iot-datasource"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red-contrib-graphs",
+     "file": "/usr/src/node-red/node_modules/node-red-contrib-graphs/datasource.js"
+    }
+   }
+  },
+  "node-red-node-rbe": {
+   "name": "node-red-node-rbe",
+   "version": "0.2.9",
+   "local": false,
+   "nodes": {
+    "rbe": {
+     "name": "rbe",
+     "types": [
+      "rbe"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red-node-rbe",
+     "file": "/usr/src/node-red/node_modules/node-red-node-rbe/rbe.js"
+    }
+   }
+  },
+  "node-red-node-tail": {
+   "name": "node-red-node-tail",
+   "version": "0.1.1",
+   "local": false,
+   "nodes": {
+    "tail": {
+     "name": "tail",
+     "types": [
+      "tail"
+     ],
+     "enabled": true,
+     "local": false,
+     "module": "node-red-node-tail",
+     "file": "/usr/src/node-red/node_modules/node-red-node-tail/28-tail.js"
+    }
+   }
+  }
+ },
+ "_credentialSecret": "c028885f2cb96099498adca00919db2df73313d916d037a5a1c8eb931b43c03e",
+ "users": {
+  "_": {
+   "editor": {
+    "view": {
+     "view-show-grid": true,
+     "view-snap-grid": true,
+     "view-grid-size": 20,
+     "view-node-status": true,
+     "view-node-show-label": true,
+     "view-show-tips": false
+    }
+   }
+  }
+ }
+}
\ No newline at end of file
diff --git a/examples/basyx.nodered/node-red/.dash/config_default.json b/examples/basyx.nodered/node-red/.dash/config_default.json
new file mode 100644
index 0000000..711d715
--- /dev/null
+++ b/examples/basyx.nodered/node-red/.dash/config_default.json
@@ -0,0 +1,3 @@
+{
+	"dashboards": []
+}
\ No newline at end of file
diff --git a/examples/basyx.nodered/node-red/flows.json b/examples/basyx.nodered/node-red/flows.json
new file mode 100644
index 0000000..0e22486
--- /dev/null
+++ b/examples/basyx.nodered/node-red/flows.json
@@ -0,0 +1 @@
+[{"id":"ac89e902.a48598","type":"tab","label":"AAS Temperature","disabled":false,"info":""},{"id":"91383a96.5b2e48","type":"tab","label":"Test","disabled":false,"info":""},{"id":"1b4daff8.52358","type":"mqtt-broker","z":"","name":"Streamsheets Mosquitto","broker":"http://streamsheets","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"2289cf21.0a21b","type":"inject","z":"ac89e902.a48598","name":"Start","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":120,"wires":[["c3659321.46995"]]},{"id":"c3659321.46995","type":"get-aas-property","z":"ac89e902.a48598","name":"Get Temperature","property":"temp","period":1,"x":270,"y":120,"wires":[["a56bd8e1.1777c8","2c13d59c.208cea","8c41e115.ac913"]]},{"id":"4e72f0db.c2a7a","type":"inject","z":"91383a96.5b2e48","name":"Data","props":[{"p":"values","v":"[22.344,23.434,24.342,21.098]","vt":"json"},{"p":"timestamp","v":"[121323,2112231,321331,321321]","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":140,"y":100,"wires":[["a53d7930.6109f8","4a734a5f.b22314","ab2d648a.1767f8"]]},{"id":"a53d7930.6109f8","type":"debug","z":"91383a96.5b2e48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":250,"y":240,"wires":[]},{"id":"4a734a5f.b22314","type":"function","z":"91383a96.5b2e48","name":"Calculate Average","func":"msg.avg = msg.values.reduce((a,b) => a + b, 0) / msg.values.length;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":450,"y":120,"wires":[["6b28c27b.5547bc"]]},{"id":"6b28c27b.5547bc","type":"debug","z":"91383a96.5b2e48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":710,"y":120,"wires":[]},{"id":"ab2d648a.1767f8","type":"function","z":"91383a96.5b2e48","name":"Calculate Fahrenheit","func":"msg.fahrenheit = msg.values.map(v => v * 1.8 + 32);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":460,"y":180,"wires":[["5e614070.a223f"]]},{"id":"5e614070.a223f","type":"debug","z":"91383a96.5b2e48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":710,"y":180,"wires":[]},{"id":"e733d05.63a9c3","type":"iot-datasource","z":"ac89e902.a48598","name":"Temperature Datasource","tstampField":"tstamp","dataField":"data","disableDiscover":false,"x":730,"y":240,"wires":[[]]},{"id":"8e627da8.65b74","type":"mqtt out","z":"ac89e902.a48598","name":"MQTT Avg Temp Publisher","topic":"temperature/average","qos":"","retain":"","broker":"1b4daff8.52358","x":740,"y":120,"wires":[]},{"id":"7aa9e937.6575c8","type":"mqtt in","z":"ac89e902.a48598","name":"MQTT Avg Temp Consumer","topic":"temperature/average","qos":"2","datatype":"json","broker":"1b4daff8.52358","x":160,"y":360,"wires":[["f96c72b.3be659"]]},{"id":"f96c72b.3be659","type":"debug","z":"ac89e902.a48598","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.average","targetType":"msg","statusVal":"","statusType":"auto","x":420,"y":360,"wires":[]},{"id":"a56bd8e1.1777c8","type":"function","z":"ac89e902.a48598","name":"Calculate Average","func":"const payload = msg.payload;\nlet average = payload.data.reduce((a,b) => a + b, 0) / payload.data.length;\npayload.average = average;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":490,"y":120,"wires":[["8e627da8.65b74"]]},{"id":"2c13d59c.208cea","type":"function","z":"ac89e902.a48598","name":"Calculate Fahrenheit","func":"const payload = msg.payload;\nlet fahrenheit = payload.data.map(v => v * 1.8 + 32);\npayload.fahrenheit = fahrenheit;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":500,"y":180,"wires":[["a3733cf8.97468"]]},{"id":"a3733cf8.97468","type":"mqtt out","z":"ac89e902.a48598","name":"MQTT Fahrenheit Temp Publisher","topic":"temperature/fahrenheit","qos":"","retain":"","broker":"1b4daff8.52358","x":760,"y":180,"wires":[]},{"id":"8c41e115.ac913","type":"function","z":"ac89e902.a48598","name":"Get most recent","func":"msg.payload.tstamp = new Date(msg.payload.tstamp.pop()).getTime();\nmsg.payload.data = msg.payload.data.pop();\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":480,"y":240,"wires":[["e733d05.63a9c3"]]}]
\ No newline at end of file
diff --git a/examples/basyx.nodered/node-red/flows_cred.json b/examples/basyx.nodered/node-red/flows_cred.json
new file mode 100644
index 0000000..4c13969
--- /dev/null
+++ b/examples/basyx.nodered/node-red/flows_cred.json
@@ -0,0 +1 @@
+{"$":"39276bec4323f4ed09a2dd89a418c8dbzuTmQVz1IqyWc+XsMg2dPUwV6wsK1UkHOK9rPFDgSV45EMgO7pc7LYzFXg=="}
\ No newline at end of file
diff --git a/examples/basyx.nodered/node-red/package.json b/examples/basyx.nodered/node-red/package.json
new file mode 100644
index 0000000..b788fd4
--- /dev/null
+++ b/examples/basyx.nodered/node-red/package.json
@@ -0,0 +1,6 @@
+{
+    "name": "node-red-project",
+    "description": "A Node-RED Project",
+    "version": "0.0.1",
+    "private": true
+}
\ No newline at end of file
diff --git a/examples/basyx.nodered/node-red/settings.js b/examples/basyx.nodered/node-red/settings.js
new file mode 100644
index 0000000..f3c93f5
--- /dev/null
+++ b/examples/basyx.nodered/node-red/settings.js
@@ -0,0 +1,299 @@
+/**
+ * Copyright JS Foundation and other contributors, http://js.foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ **/
+
+module.exports = {
+    // the tcp port that the Node-RED web server is listening on
+    uiPort: process.env.PORT || 1880,
+
+    // By default, the Node-RED UI accepts connections on all IPv4 interfaces.
+    // To listen on all IPv6 addresses, set uiHost to "::",
+    // The following property can be used to listen on a specific interface. For
+    // example, the following would only allow connections from the local machine.
+    //uiHost: "127.0.0.1",
+
+    // Retry time in milliseconds for MQTT connections
+    mqttReconnectTime: 15000,
+
+    // Retry time in milliseconds for Serial port connections
+    serialReconnectTime: 15000,
+
+    // Retry time in milliseconds for TCP socket connections
+    //socketReconnectTime: 10000,
+
+    // Timeout in milliseconds for TCP server socket connections
+    //  defaults to no timeout
+    //socketTimeout: 120000,
+
+    // Maximum number of messages to wait in queue while attempting to connect to TCP socket
+    //  defaults to 1000
+    //tcpMsgQueueSize: 2000,
+
+    // Timeout in milliseconds for HTTP request connections
+    //  defaults to 120 seconds
+    //httpRequestTimeout: 120000,
+
+    // The maximum length, in characters, of any message sent to the debug sidebar tab
+    debugMaxLength: 1000,
+
+    // The maximum number of messages nodes will buffer internally as part of their
+    // operation. This applies across a range of nodes that operate on message sequences.
+    //  defaults to no limit. A value of 0 also means no limit is applied.
+    //nodeMessageBufferMaxLength: 0,
+
+    // To disable the option for using local files for storing keys and certificates in the TLS configuration
+    //  node, set this to true
+    //tlsConfigDisableLocalFiles: true,
+
+    // Colourise the console output of the debug node
+    //debugUseColors: true,
+
+    // The file containing the flows. If not set, it defaults to flows_<hostname>.json
+    //flowFile: 'flows.json',
+
+    // To enabled pretty-printing of the flow within the flow file, set the following
+    //  property to true:
+    //flowFilePretty: true,
+
+    // By default, credentials are encrypted in storage using a generated key. To
+    // specify your own secret, set the following property.
+    // If you want to disable encryption of credentials, set this property to false.
+    // Note: once you set this property, do not change it - doing so will prevent
+    // node-red from being able to decrypt your existing credentials and they will be
+    // lost.
+    //credentialSecret: "a-secret-key",
+
+    // By default, all user data is stored in a directory called `.node-red` under
+    // the user's home directory. To use a different location, the following
+    // property can be used
+    //userDir: '/home/nol/.node-red/',
+
+    // Node-RED scans the `nodes` directory in the userDir to find local node files.
+    // The following property can be used to specify an additional directory to scan.
+    //nodesDir: '/home/nol/.node-red/nodes',
+
+    // By default, the Node-RED UI is available at http://localhost:1880/
+    // The following property can be used to specify a different root path.
+    // If set to false, this is disabled.
+    //httpAdminRoot: '/admin',
+
+    // Some nodes, such as HTTP In, can be used to listen for incoming http requests.
+    // By default, these are served relative to '/'. The following property
+    // can be used to specifiy a different root path. If set to false, this is
+    // disabled.
+    //httpNodeRoot: '/red-nodes',
+
+    // The following property can be used in place of 'httpAdminRoot' and 'httpNodeRoot',
+    // to apply the same root to both parts.
+    //httpRoot: '/red',
+
+    // When httpAdminRoot is used to move the UI to a different root path, the
+    // following property can be used to identify a directory of static content
+    // that should be served at http://localhost:1880/.
+    //httpStatic: '/home/nol/node-red-static/',
+
+    // The maximum size of HTTP request that will be accepted by the runtime api.
+    // Default: 5mb
+    //apiMaxLength: '5mb',
+
+    // If you installed the optional node-red-dashboard you can set it's path
+    // relative to httpRoot
+    //ui: { path: "ui" },
+
+    // Securing Node-RED
+    // -----------------
+    // To password protect the Node-RED editor and admin API, the following
+    // property can be used. See http://nodered.org/docs/security.html for details.
+    //adminAuth: {
+    //    type: "credentials",
+    //    users: [{
+    //        username: "admin",
+    //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
+    //        permissions: "*"
+    //    }]
+    //},
+
+    // To password protect the node-defined HTTP endpoints (httpNodeRoot), or
+    // the static content (httpStatic), the following properties can be used.
+    // The pass field is a bcrypt hash of the password.
+    // See http://nodered.org/docs/security.html#generating-the-password-hash
+    //httpNodeAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
+    //httpStaticAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
+
+    // The following property can be used to enable HTTPS
+    // See http://nodejs.org/api/https.html#https_https_createserver_options_requestlistener
+    // for details on its contents.
+    // This property can be either an object, containing both a (private) key and a (public) certificate,
+    // or a function that returns such an object:
+    //// https object:
+    //https: {
+    //  key: require("fs").readFileSync('privkey.pem'),
+    //  cert: require("fs").readFileSync('cert.pem')
+    //},
+    ////https function:
+    // https: function() {
+    //     // This function should return the options object, or a Promise
+    //     // that resolves to the options object
+    //     return {
+    //         key: require("fs").readFileSync('privkey.pem'),
+    //         cert: require("fs").readFileSync('cert.pem')
+    //     }
+    // },
+
+    // The following property can be used to refresh the https settings at a
+    // regular time interval in hours.
+    // This requires:
+    //   - the `https` setting to be a function that can be called to get
+    //     the refreshed settings.
+    //   - Node.js 11 or later.
+    //httpsRefreshInterval : 12,
+
+    // The following property can be used to cause insecure HTTP connections to
+    // be redirected to HTTPS.
+    //requireHttps: true,
+
+    // The following property can be used to disable the editor. The admin API
+    // is not affected by this option. To disable both the editor and the admin
+    // API, use either the httpRoot or httpAdminRoot properties
+    //disableEditor: false,
+
+    // The following property can be used to configure cross-origin resource sharing
+    // in the HTTP nodes.
+    // See https://github.com/troygoode/node-cors#configuration-options for
+    // details on its contents. The following is a basic permissive set of options:
+    //httpNodeCors: {
+    //    origin: "*",
+    //    methods: "GET,PUT,POST,DELETE"
+    //},
+
+    // If you need to set an http proxy please set an environment variable
+    // called http_proxy (or HTTP_PROXY) outside of Node-RED in the operating system.
+    // For example - http_proxy=http://myproxy.com:8080
+    // (Setting it here will have no effect)
+    // You may also specify no_proxy (or NO_PROXY) to supply a comma separated
+    // list of domains to not proxy, eg - no_proxy=.acme.co,.acme.co.uk
+
+    // The following property can be used to add a custom middleware function
+    // in front of all http in nodes. This allows custom authentication to be
+    // applied to all http in nodes, or any other sort of common request processing.
+    //httpNodeMiddleware: function(req,res,next) {
+    //    // Handle/reject the request, or pass it on to the http in node by calling next();
+    //    // Optionally skip our rawBodyParser by setting this to true;
+    //    //req.skipRawBodyParser = true;
+    //    next();
+    //},
+
+
+    // The following property can be used to add a custom middleware function
+    // in front of all admin http routes. For example, to set custom http
+    // headers
+    // httpAdminMiddleware: function(req,res,next) {
+    //    // Set the X-Frame-Options header to limit where the editor
+    //    // can be embedded
+    //    //res.set('X-Frame-Options', 'sameorigin');
+    //    next();
+    // },
+
+    // The following property can be used to pass custom options to the Express.js
+    // server used by Node-RED. For a full list of available options, refer
+    // to http://expressjs.com/en/api.html#app.settings.table
+    //httpServerOptions: { },
+
+    // The following property can be used to verify websocket connection attempts.
+    // This allows, for example, the HTTP request headers to be checked to ensure
+    // they include valid authentication information.
+    //webSocketNodeVerifyClient: function(info) {
+    //    // 'info' has three properties:
+    //    //   - origin : the value in the Origin header
+    //    //   - req : the HTTP request
+    //    //   - secure : true if req.connection.authorized or req.connection.encrypted is set
+    //    //
+    //    // The function should return true if the connection should be accepted, false otherwise.
+    //    //
+    //    // Alternatively, if this function is defined to accept a second argument, callback,
+    //    // it can be used to verify the client asynchronously.
+    //    // The callback takes three arguments:
+    //    //   - result : boolean, whether to accept the connection or not
+    //    //   - code : if result is false, the HTTP error status to return
+    //    //   - reason: if result is false, the HTTP reason string to return
+    //},
+
+    // The following property can be used to seed Global Context with predefined
+    // values. This allows extra node modules to be made available with the
+    // Function node.
+    // For example,
+    //    functionGlobalContext: { os:require('os') }
+    // can be accessed in a function block as:
+    //    global.get("os")
+    functionGlobalContext: {
+        // os:require('os'),
+        // jfive:require("johnny-five"),
+        // j5board:require("johnny-five").Board({repl:false})
+    },
+    // `global.keys()` returns a list of all properties set in global context.
+    // This allows them to be displayed in the Context Sidebar within the editor.
+    // In some circumstances it is not desirable to expose them to the editor. The
+    // following property can be used to hide any property set in `functionGlobalContext`
+    // from being list by `global.keys()`.
+    // By default, the property is set to false to avoid accidental exposure of
+    // their values. Setting this to true will cause the keys to be listed.
+    exportGlobalContextKeys: false,
+
+
+    // Context Storage
+    // The following property can be used to enable context storage. The configuration
+    // provided here will enable file-based context that flushes to disk every 30 seconds.
+    // Refer to the documentation for further options: https://nodered.org/docs/api/context/
+    //
+    //contextStorage: {
+    //    default: {
+    //        module:"localfilesystem"
+    //    },
+    //},
+
+    // The following property can be used to order the categories in the editor
+    // palette. If a node's category is not in the list, the category will get
+    // added to the end of the palette.
+    // If not set, the following default order is used:
+    //paletteCategories: ['subflows', 'common', 'function', 'network', 'sequence', 'parser', 'storage'],
+
+    // Configure the logging output
+    logging: {
+        // Only console logging is currently supported
+        console: {
+            // Level of logging to be recorded. Options are:
+            // fatal - only those errors which make the application unusable should be recorded
+            // error - record errors which are deemed fatal for a particular request + fatal errors
+            // warn - record problems which are non fatal + errors + fatal errors
+            // info - record information about the general running of the application + warn + error + fatal errors
+            // debug - record information which is more verbose than info + info + warn + error + fatal errors
+            // trace - record very detailed logging + debug + info + warn + error + fatal errors
+            // off - turn off all logging (doesn't affect metrics or audit)
+            level: "info",
+            // Whether or not to include metric events in the log output
+            metrics: false,
+            // Whether or not to include audit events in the log output
+            audit: false
+        }
+    },
+
+    // Customising the editor
+    editorTheme: {
+        projects: {
+            // To enable the Projects feature, set this value to true
+            enabled: false
+        }
+    }
+}
diff --git a/examples/basyx.nodered/package.json b/examples/basyx.nodered/package.json
new file mode 100644
index 0000000..03f658f
--- /dev/null
+++ b/examples/basyx.nodered/package.json
@@ -0,0 +1,35 @@
+{
+    "name": "node-red-docker",
+    "version": "1.1.2",
+    "description": "Low-code programming for event-driven applications",
+    "homepage": "http://nodered.org",
+    "license": "Apache-2.0",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/node-red/node-red-docker.git"
+    },
+    "main": "node_modules/node-red/red/red.js",
+    "scripts": {
+        "start": "node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS",
+        "debug": "node --inspect=0.0.0.0:9229 $NODE_OPTIONS node_modules/node-red/red.js $FLOWS",
+        "debug_brk": "node --inspect=0.0.0.0:9229 --inspect-brk $NODE_OPTIONS node_modules/node-red/red.js $FLOWS"
+    },
+    "contributors": [
+        {
+            "name": "Dave Conway-Jones"
+        },
+        {
+            "name": "Nick O'Leary"
+        },
+        {
+            "name": "James Thomas"
+        },
+        {                                                                                                                                                                                                "name": "Raymond Mouthaan"                                                                                                                                                               }                                                                                                                                                                                        ],
+    "dependencies": {
+        "node-red": "1.1.2",
+        "node-red-contrib-graphs": "0.3.5"
+    },
+    "engines": {
+        "node": ">=10"
+    }
+}
\ No newline at end of file
diff --git a/examples/basyx.nodered/settings.js b/examples/basyx.nodered/settings.js
new file mode 100644
index 0000000..f3c93f5
--- /dev/null
+++ b/examples/basyx.nodered/settings.js
@@ -0,0 +1,299 @@
+/**
+ * Copyright JS Foundation and other contributors, http://js.foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ **/
+
+module.exports = {
+    // the tcp port that the Node-RED web server is listening on
+    uiPort: process.env.PORT || 1880,
+
+    // By default, the Node-RED UI accepts connections on all IPv4 interfaces.
+    // To listen on all IPv6 addresses, set uiHost to "::",
+    // The following property can be used to listen on a specific interface. For
+    // example, the following would only allow connections from the local machine.
+    //uiHost: "127.0.0.1",
+
+    // Retry time in milliseconds for MQTT connections
+    mqttReconnectTime: 15000,
+
+    // Retry time in milliseconds for Serial port connections
+    serialReconnectTime: 15000,
+
+    // Retry time in milliseconds for TCP socket connections
+    //socketReconnectTime: 10000,
+
+    // Timeout in milliseconds for TCP server socket connections
+    //  defaults to no timeout
+    //socketTimeout: 120000,
+
+    // Maximum number of messages to wait in queue while attempting to connect to TCP socket
+    //  defaults to 1000
+    //tcpMsgQueueSize: 2000,
+
+    // Timeout in milliseconds for HTTP request connections
+    //  defaults to 120 seconds
+    //httpRequestTimeout: 120000,
+
+    // The maximum length, in characters, of any message sent to the debug sidebar tab
+    debugMaxLength: 1000,
+
+    // The maximum number of messages nodes will buffer internally as part of their
+    // operation. This applies across a range of nodes that operate on message sequences.
+    //  defaults to no limit. A value of 0 also means no limit is applied.
+    //nodeMessageBufferMaxLength: 0,
+
+    // To disable the option for using local files for storing keys and certificates in the TLS configuration
+    //  node, set this to true
+    //tlsConfigDisableLocalFiles: true,
+
+    // Colourise the console output of the debug node
+    //debugUseColors: true,
+
+    // The file containing the flows. If not set, it defaults to flows_<hostname>.json
+    //flowFile: 'flows.json',
+
+    // To enabled pretty-printing of the flow within the flow file, set the following
+    //  property to true:
+    //flowFilePretty: true,
+
+    // By default, credentials are encrypted in storage using a generated key. To
+    // specify your own secret, set the following property.
+    // If you want to disable encryption of credentials, set this property to false.
+    // Note: once you set this property, do not change it - doing so will prevent
+    // node-red from being able to decrypt your existing credentials and they will be
+    // lost.
+    //credentialSecret: "a-secret-key",
+
+    // By default, all user data is stored in a directory called `.node-red` under
+    // the user's home directory. To use a different location, the following
+    // property can be used
+    //userDir: '/home/nol/.node-red/',
+
+    // Node-RED scans the `nodes` directory in the userDir to find local node files.
+    // The following property can be used to specify an additional directory to scan.
+    //nodesDir: '/home/nol/.node-red/nodes',
+
+    // By default, the Node-RED UI is available at http://localhost:1880/
+    // The following property can be used to specify a different root path.
+    // If set to false, this is disabled.
+    //httpAdminRoot: '/admin',
+
+    // Some nodes, such as HTTP In, can be used to listen for incoming http requests.
+    // By default, these are served relative to '/'. The following property
+    // can be used to specifiy a different root path. If set to false, this is
+    // disabled.
+    //httpNodeRoot: '/red-nodes',
+
+    // The following property can be used in place of 'httpAdminRoot' and 'httpNodeRoot',
+    // to apply the same root to both parts.
+    //httpRoot: '/red',
+
+    // When httpAdminRoot is used to move the UI to a different root path, the
+    // following property can be used to identify a directory of static content
+    // that should be served at http://localhost:1880/.
+    //httpStatic: '/home/nol/node-red-static/',
+
+    // The maximum size of HTTP request that will be accepted by the runtime api.
+    // Default: 5mb
+    //apiMaxLength: '5mb',
+
+    // If you installed the optional node-red-dashboard you can set it's path
+    // relative to httpRoot
+    //ui: { path: "ui" },
+
+    // Securing Node-RED
+    // -----------------
+    // To password protect the Node-RED editor and admin API, the following
+    // property can be used. See http://nodered.org/docs/security.html for details.
+    //adminAuth: {
+    //    type: "credentials",
+    //    users: [{
+    //        username: "admin",
+    //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
+    //        permissions: "*"
+    //    }]
+    //},
+
+    // To password protect the node-defined HTTP endpoints (httpNodeRoot), or
+    // the static content (httpStatic), the following properties can be used.
+    // The pass field is a bcrypt hash of the password.
+    // See http://nodered.org/docs/security.html#generating-the-password-hash
+    //httpNodeAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
+    //httpStaticAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
+
+    // The following property can be used to enable HTTPS
+    // See http://nodejs.org/api/https.html#https_https_createserver_options_requestlistener
+    // for details on its contents.
+    // This property can be either an object, containing both a (private) key and a (public) certificate,
+    // or a function that returns such an object:
+    //// https object:
+    //https: {
+    //  key: require("fs").readFileSync('privkey.pem'),
+    //  cert: require("fs").readFileSync('cert.pem')
+    //},
+    ////https function:
+    // https: function() {
+    //     // This function should return the options object, or a Promise
+    //     // that resolves to the options object
+    //     return {
+    //         key: require("fs").readFileSync('privkey.pem'),
+    //         cert: require("fs").readFileSync('cert.pem')
+    //     }
+    // },
+
+    // The following property can be used to refresh the https settings at a
+    // regular time interval in hours.
+    // This requires:
+    //   - the `https` setting to be a function that can be called to get
+    //     the refreshed settings.
+    //   - Node.js 11 or later.
+    //httpsRefreshInterval : 12,
+
+    // The following property can be used to cause insecure HTTP connections to
+    // be redirected to HTTPS.
+    //requireHttps: true,
+
+    // The following property can be used to disable the editor. The admin API
+    // is not affected by this option. To disable both the editor and the admin
+    // API, use either the httpRoot or httpAdminRoot properties
+    //disableEditor: false,
+
+    // The following property can be used to configure cross-origin resource sharing
+    // in the HTTP nodes.
+    // See https://github.com/troygoode/node-cors#configuration-options for
+    // details on its contents. The following is a basic permissive set of options:
+    //httpNodeCors: {
+    //    origin: "*",
+    //    methods: "GET,PUT,POST,DELETE"
+    //},
+
+    // If you need to set an http proxy please set an environment variable
+    // called http_proxy (or HTTP_PROXY) outside of Node-RED in the operating system.
+    // For example - http_proxy=http://myproxy.com:8080
+    // (Setting it here will have no effect)
+    // You may also specify no_proxy (or NO_PROXY) to supply a comma separated
+    // list of domains to not proxy, eg - no_proxy=.acme.co,.acme.co.uk
+
+    // The following property can be used to add a custom middleware function
+    // in front of all http in nodes. This allows custom authentication to be
+    // applied to all http in nodes, or any other sort of common request processing.
+    //httpNodeMiddleware: function(req,res,next) {
+    //    // Handle/reject the request, or pass it on to the http in node by calling next();
+    //    // Optionally skip our rawBodyParser by setting this to true;
+    //    //req.skipRawBodyParser = true;
+    //    next();
+    //},
+
+
+    // The following property can be used to add a custom middleware function
+    // in front of all admin http routes. For example, to set custom http
+    // headers
+    // httpAdminMiddleware: function(req,res,next) {
+    //    // Set the X-Frame-Options header to limit where the editor
+    //    // can be embedded
+    //    //res.set('X-Frame-Options', 'sameorigin');
+    //    next();
+    // },
+
+    // The following property can be used to pass custom options to the Express.js
+    // server used by Node-RED. For a full list of available options, refer
+    // to http://expressjs.com/en/api.html#app.settings.table
+    //httpServerOptions: { },
+
+    // The following property can be used to verify websocket connection attempts.
+    // This allows, for example, the HTTP request headers to be checked to ensure
+    // they include valid authentication information.
+    //webSocketNodeVerifyClient: function(info) {
+    //    // 'info' has three properties:
+    //    //   - origin : the value in the Origin header
+    //    //   - req : the HTTP request
+    //    //   - secure : true if req.connection.authorized or req.connection.encrypted is set
+    //    //
+    //    // The function should return true if the connection should be accepted, false otherwise.
+    //    //
+    //    // Alternatively, if this function is defined to accept a second argument, callback,
+    //    // it can be used to verify the client asynchronously.
+    //    // The callback takes three arguments:
+    //    //   - result : boolean, whether to accept the connection or not
+    //    //   - code : if result is false, the HTTP error status to return
+    //    //   - reason: if result is false, the HTTP reason string to return
+    //},
+
+    // The following property can be used to seed Global Context with predefined
+    // values. This allows extra node modules to be made available with the
+    // Function node.
+    // For example,
+    //    functionGlobalContext: { os:require('os') }
+    // can be accessed in a function block as:
+    //    global.get("os")
+    functionGlobalContext: {
+        // os:require('os'),
+        // jfive:require("johnny-five"),
+        // j5board:require("johnny-five").Board({repl:false})
+    },
+    // `global.keys()` returns a list of all properties set in global context.
+    // This allows them to be displayed in the Context Sidebar within the editor.
+    // In some circumstances it is not desirable to expose them to the editor. The
+    // following property can be used to hide any property set in `functionGlobalContext`
+    // from being list by `global.keys()`.
+    // By default, the property is set to false to avoid accidental exposure of
+    // their values. Setting this to true will cause the keys to be listed.
+    exportGlobalContextKeys: false,
+
+
+    // Context Storage
+    // The following property can be used to enable context storage. The configuration
+    // provided here will enable file-based context that flushes to disk every 30 seconds.
+    // Refer to the documentation for further options: https://nodered.org/docs/api/context/
+    //
+    //contextStorage: {
+    //    default: {
+    //        module:"localfilesystem"
+    //    },
+    //},
+
+    // The following property can be used to order the categories in the editor
+    // palette. If a node's category is not in the list, the category will get
+    // added to the end of the palette.
+    // If not set, the following default order is used:
+    //paletteCategories: ['subflows', 'common', 'function', 'network', 'sequence', 'parser', 'storage'],
+
+    // Configure the logging output
+    logging: {
+        // Only console logging is currently supported
+        console: {
+            // Level of logging to be recorded. Options are:
+            // fatal - only those errors which make the application unusable should be recorded
+            // error - record errors which are deemed fatal for a particular request + fatal errors
+            // warn - record problems which are non fatal + errors + fatal errors
+            // info - record information about the general running of the application + warn + error + fatal errors
+            // debug - record information which is more verbose than info + info + warn + error + fatal errors
+            // trace - record very detailed logging + debug + info + warn + error + fatal errors
+            // off - turn off all logging (doesn't affect metrics or audit)
+            level: "info",
+            // Whether or not to include metric events in the log output
+            metrics: false,
+            // Whether or not to include audit events in the log output
+            audit: false
+        }
+    },
+
+    // Customising the editor
+    editorTheme: {
+        projects: {
+            // To enable the Projects feature, set this value to true
+            enabled: false
+        }
+    }
+}
diff --git a/examples/basyx.nodered/start.bat b/examples/basyx.nodered/start.bat
new file mode 100644
index 0000000..83ed0d0
--- /dev/null
+++ b/examples/basyx.nodered/start.bat
@@ -0,0 +1 @@
+docker-compose up
diff --git a/examples/basyx.nodered/start.sh b/examples/basyx.nodered/start.sh
new file mode 100644
index 0000000..d935e43
--- /dev/null
+++ b/examples/basyx.nodered/start.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose up
\ No newline at end of file
diff --git a/examples/basyx.nodered/stop.bat b/examples/basyx.nodered/stop.bat
new file mode 100644
index 0000000..58694d0
--- /dev/null
+++ b/examples/basyx.nodered/stop.bat
@@ -0,0 +1 @@
+docker-compose down
\ No newline at end of file
diff --git a/examples/basyx.nodered/stop.sh b/examples/basyx.nodered/stop.sh
new file mode 100644
index 0000000..f5139e2
--- /dev/null
+++ b/examples/basyx.nodered/stop.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose down
\ No newline at end of file
diff --git a/examples/basyx.streamsheets/.gitignore b/examples/basyx.streamsheets/.gitignore
new file mode 100644
index 0000000..5e2ad3c
--- /dev/null
+++ b/examples/basyx.streamsheets/.gitignore
@@ -0,0 +1,2 @@
+/mosquitto
+/streamsheets
\ No newline at end of file
diff --git a/examples/basyx.streamsheets/AAS Property Dashboard.json b/examples/basyx.streamsheets/AAS Property Dashboard.json
new file mode 100644
index 0000000..ecf6f0c
--- /dev/null
+++ b/examples/basyx.streamsheets/AAS Property Dashboard.json
@@ -0,0 +1,5225 @@
+{
+  "machines": [
+    {
+      "machine": {
+        "id": "S1-EB3RpyP",
+        "name": "AAS Property Dashboard",
+        "state": "stopped",
+        "metadata": {
+          "owner": "anon",
+          "lastModified": 1599658322212,
+          "lastModifiedBy": "unknown",
+          "machineservice": {
+            "id": "machines-HkgWO-Rp1v"
+          }
+        },
+        "streamsheets": [
+          {
+            "id": "Sk7ErnRTJD",
+            "name": "S1",
+            "loop": {
+              "path": "",
+              "enabled": false
+            },
+            "inbox": {
+              "max": 20,
+              "type": "MessageBox",
+              "id": "SyENH3Aakw",
+              "stream": null
+            },
+            "sheet": {
+              "cells": {
+                "G1": {
+                  "value": "",
+                  "type": "string",
+                  "level": 0
+                },
+                "A3": {
+                  "formula": "REST.REQUEST(|AASRESTTestProducer,\"http://aas-wrapper:6500/streamsheets/temp\",\"GET\",INBOX(\"dataElement\"))",
+                  "value": "B14q-zULED",
+                  "type": "undefined",
+                  "level": 0,
+                  "references": [
+                    "|AASRESTTestProducer"
+                  ]
+                },
+                "B3": {
+                  "formula": "READ(INBOXDATA(,,\"content\"),,\"Array\")",
+                  "value": "content",
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C3": {
+                  "formula": "READ(INBOXDATA(,,\"timestamp\"),,\"Array\")",
+                  "value": "timestamp",
+                  "type": "undefined",
+                  "level": 0
+                },
+                "G3": {
+                  "value": "Time",
+                  "type": "string",
+                  "level": 0
+                },
+                "H3": {
+                  "value": "Temperature",
+                  "type": "string",
+                  "level": 0
+                },
+                "B4": {
+                  "formula": "READ(INBOXDATA(,,B3,\"0\"),H4,\"Number\")",
+                  "value": 0,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C4": {
+                  "formula": "READ(INBOXDATA(,,C3,\"0\"),D4,\"String\")",
+                  "value": 0,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D4": {
+                  "value": "2020-09-09T13:00:40.409Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G4": {
+                  "formula": "JSONTIME2EXCEL(D4)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H4": {
+                  "value": 21.07154194806827,
+                  "type": "number",
+                  "level": 0
+                },
+                "B5": {
+                  "formula": "READ(INBOXDATA(,,B3,\"1\"),H5,\"Number\")",
+                  "value": 1,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C5": {
+                  "formula": "READ(INBOXDATA(,,C3,\"1\"),D5,\"String\")",
+                  "value": 1,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D5": {
+                  "value": "2020-09-09T13:00:41.415Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G5": {
+                  "formula": "JSONTIME2EXCEL(D5)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H5": {
+                  "value": 28.496771926635027,
+                  "type": "number",
+                  "level": 0
+                },
+                "B6": {
+                  "formula": "READ(INBOXDATA(,,B3,\"2\"),H6,\"Number\")",
+                  "value": 2,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C6": {
+                  "formula": "READ(INBOXDATA(,,C3,\"2\"),D6,\"String\")",
+                  "value": 2,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D6": {
+                  "value": "2020-09-09T13:00:42.422Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G6": {
+                  "formula": "JSONTIME2EXCEL(D6)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H6": {
+                  "value": 27.348393994685246,
+                  "type": "number",
+                  "level": 0
+                },
+                "B7": {
+                  "formula": "READ(INBOXDATA(,,B3,\"3\"),H7,\"Number\")",
+                  "value": 3,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C7": {
+                  "formula": "READ(INBOXDATA(,,C3,\"3\"),D7,\"String\")",
+                  "value": 3,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D7": {
+                  "value": "2020-09-09T13:00:43.427Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G7": {
+                  "formula": "JSONTIME2EXCEL(D7)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H7": {
+                  "value": 21.369693237856616,
+                  "type": "number",
+                  "level": 0
+                },
+                "B8": {
+                  "formula": "READ(INBOXDATA(,,B3,\"4\"),H8,\"Number\")",
+                  "value": 4,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C8": {
+                  "formula": "READ(INBOXDATA(,,C3,\"4\"),D8,\"String\")",
+                  "value": 4,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D8": {
+                  "value": "2020-09-09T13:00:44.436Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G8": {
+                  "formula": "JSONTIME2EXCEL(D8)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H8": {
+                  "value": 24.00643356528727,
+                  "type": "number",
+                  "level": 0
+                },
+                "B9": {
+                  "formula": "READ(INBOXDATA(,,B3,\"5\"),H9,\"Number\")",
+                  "value": 5,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C9": {
+                  "formula": "READ(INBOXDATA(,,C3,\"5\"),D9,\"String\")",
+                  "value": 5,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D9": {
+                  "value": "2020-09-09T13:00:45.443Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G9": {
+                  "formula": "JSONTIME2EXCEL(D9)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H9": {
+                  "value": 29.263190638856287,
+                  "type": "number",
+                  "level": 0
+                },
+                "B10": {
+                  "formula": "READ(INBOXDATA(,,B3,\"6\"),H10,\"Number\")",
+                  "value": 6,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C10": {
+                  "formula": "READ(INBOXDATA(,,C3,\"6\"),D10,\"String\")",
+                  "value": 6,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D10": {
+                  "value": "2020-09-09T13:00:46.449Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G10": {
+                  "formula": "JSONTIME2EXCEL(D10)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H10": {
+                  "value": 20.655619621525332,
+                  "type": "number",
+                  "level": 0
+                },
+                "B11": {
+                  "formula": "READ(INBOXDATA(,,B3,\"7\"),H11,\"Number\")",
+                  "value": 7,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C11": {
+                  "formula": "READ(INBOXDATA(,,C3,\"7\"),D11,\"String\")",
+                  "value": 7,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D11": {
+                  "value": "2020-09-09T13:00:47.454Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G11": {
+                  "formula": "JSONTIME2EXCEL(D11)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H11": {
+                  "value": 27.183770324976013,
+                  "type": "number",
+                  "level": 0
+                },
+                "B12": {
+                  "formula": "READ(INBOXDATA(,,B3,\"8\"),H12,\"Number\")",
+                  "value": 8,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C12": {
+                  "formula": "READ(INBOXDATA(,,C3,\"8\"),D12,\"String\")",
+                  "value": 8,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D12": {
+                  "value": "2020-09-09T13:00:48.464Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G12": {
+                  "formula": "JSONTIME2EXCEL(D12)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H12": {
+                  "value": 25.686867950571894,
+                  "type": "number",
+                  "level": 0
+                },
+                "B13": {
+                  "formula": "READ(INBOXDATA(,,B3,\"9\"),H13,\"Number\")",
+                  "value": 9,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "C13": {
+                  "formula": "READ(INBOXDATA(,,C3,\"9\"),D13,\"String\")",
+                  "value": 9,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "D13": {
+                  "value": "2020-09-09T13:00:49.469Z",
+                  "type": "string",
+                  "level": 0
+                },
+                "G13": {
+                  "formula": "JSONTIME2EXCEL(D13)",
+                  "value": 44083.54213436342,
+                  "type": "undefined",
+                  "level": 0
+                },
+                "H13": {
+                  "value": 20.187588152170466,
+                  "type": "number",
+                  "level": 0
+                },
+                "F24": {
+                  "value": "",
+                  "type": "string",
+                  "level": 0
+                },
+                "F4": {
+                  "value": 1,
+                  "type": "number",
+                  "level": 0
+                },
+                "F5": {
+                  "value": 2,
+                  "type": "number",
+                  "level": 0
+                },
+                "F6": {
+                  "value": 3,
+                  "type": "number",
+                  "level": 0
+                },
+                "F7": {
+                  "value": 4,
+                  "type": "number",
+                  "level": 0
+                },
+                "F8": {
+                  "value": 5,
+                  "type": "number",
+                  "level": 0
+                },
+                "F9": {
+                  "value": 6,
+                  "type": "number",
+                  "level": 0
+                },
+                "F10": {
+                  "value": 7,
+                  "type": "number",
+                  "level": 0
+                },
+                "F11": {
+                  "value": 8,
+                  "type": "number",
+                  "level": 0
+                },
+                "F12": {
+                  "value": 9,
+                  "type": "number",
+                  "level": 0
+                },
+                "F13": {
+                  "value": 10,
+                  "type": "number",
+                  "level": 0
+                },
+                "H18": {
+                  "value": "Temperature Sensor",
+                  "type": "string",
+                  "level": 0
+                }
+              },
+              "namedCells": {},
+              "graphCells": {
+                "70847796661": {
+                  "formula": "DRAW.POLYGON(\"70847796661\",,\"Polygon1\",12289,2675,18415,3493,,\"#345678\")",
+                  "type": "string",
+                  "value": "#CALC"
+                },
+                "555401109981": {
+                  "formula": "DRAW.CHART(\"555401109981\",,\"Chart1\",15262,7480,8149,5080,,,,,,,\"column\",S1!G4:H13)",
+                  "type": "string",
+                  "value": "#CALC"
+                },
+                "60201705755": {
+                  "formula": "DRAW.RECTANGLE(\"60201705755\",,\"Rectangle9\",12355,2700,7091,1984,\"None\",FILLPATTERN(\"https://www.basys40.de/wp-content/uploads/2019/12/Logo_BaSys4_1024px-300x79.png\"))",
+                  "type": "string",
+                  "value": "#CALC"
+                },
+                "488440667154": {
+                  "formula": "DRAW.RECTANGLE(\"488440667154\",,\"Rectangle10\",3967,9421,1773,10001,,\"#345678\")",
+                  "type": "string",
+                  "value": "#CALC"
+                },
+                "919991966926": {
+                  "formula": "DRAW.RECTANGLE(\"919991966926\",,\"Rectangle11\",20623,9433,1746,10001,,\"#345678\")",
+                  "type": "string",
+                  "value": "#CALC"
+                },
+                "962757771226": {
+                  "formula": "DRAW.RECTANGLE(\"962757771226\",,\"Rectangle12\",12302,11081,14896,1376,,\"#345678\")",
+                  "type": "string",
+                  "value": "#CALC"
+                },
+                "692699117567": {
+                  "formula": "DRAW.BEZIER(\"692699117567\",,\"Bezier1\",17647,13394,212,1164)",
+                  "type": "boolean",
+                  "value": true
+                },
+                "426951475952": {
+                  "formula": "DRAW.ELLIPSE(\"426951475952\",\"Bezier1\",\"Ellipse1\",106,1032,529,529,,\"#ff0000\")",
+                  "type": "string",
+                  "value": "#CALC"
+                }
+              },
+              "properties": {
+                "sheet": {},
+                "cols": {},
+                "rows": {},
+                "cells": {}
+              },
+              "settings": {
+                "minrow": 1,
+                "maxrow": 100,
+                "mincol": -2,
+                "maxcol": 50,
+                "protected": false
+              },
+              "drawings": {},
+              "graphItems": {}
+            },
+            "trigger": {
+              "type": "start",
+              "repeat": "endless"
+            }
+          }
+        ],
+        "settings": {
+          "locale": "en",
+          "isOPCUA": false,
+          "cycletime": 200
+        },
+        "className": "Machine",
+        "namedCells": {
+          "|AASRESTTestProducer": {
+            "value": {
+              "id": "HJZR0U1xSI",
+              "name": "AASRESTTestProducer",
+              "type": "producer",
+              "state": "connected",
+              "timestamp": 1599656146504
+            },
+            "type": "object",
+            "info": {},
+            "level": 0
+          },
+          "|MQTT_Consumer": {
+            "value": {
+              "id": "CONSUMER_MQTT",
+              "name": "MQTT_Consumer",
+              "type": "stream",
+              "state": "disconnected",
+              "timestamp": 1599656156501
+            },
+            "type": "object",
+            "info": {},
+            "level": 0
+          },
+          "|Wind_Data": {
+            "value": {
+              "id": "HkZRIJtchH",
+              "name": "Wind_Data",
+              "type": "stream",
+              "state": "disconnected",
+              "timestamp": 1599656156513
+            },
+            "type": "object",
+            "info": {},
+            "level": 0
+          },
+          "|MQTT_Producer": {
+            "value": {
+              "id": "PRODUCER_MQTT",
+              "name": "MQTT_Producer",
+              "type": "producer",
+              "state": "disconnected",
+              "timestamp": 1599656156514
+            },
+            "type": "object",
+            "info": {},
+            "level": 0
+          },
+          "|SMTP_Sender": {
+            "value": {
+              "id": "B1-zoM0x1v",
+              "name": "SMTP_Sender",
+              "type": "producer",
+              "state": "disconnected",
+              "timestamp": 1599656167573
+            },
+            "type": "object",
+            "info": {},
+            "level": 0
+          }
+        },
+        "defproperties": {
+          "attributes": {
+            "cell": {
+              "level": 0,
+              "protected": true,
+              "visible": true,
+              "key": false
+            },
+            "sheet": {
+              "defaultsectionsize": 2000,
+              "initialsection": 0
+            }
+          },
+          "formats": {
+            "styles": {
+              "brightness": 0,
+              "fillstyle": 0,
+              "fillcolor": "#FFFFFF",
+              "gradientcolor": "#CCCCCC",
+              "gradientcolorstops": "",
+              "gradientangle": 0,
+              "gradienttype": 0,
+              "gradientoffset_x": 0,
+              "gradientoffset_y": 0,
+              "linecolor": "#000000",
+              "linewidth": -1,
+              "linestyle": 1,
+              "lineshape": 0,
+              "linetransparency": 100,
+              "pattern": "",
+              "patternstyle": 0,
+              "transparency": 100,
+              "leftbordercolor": "#000000",
+              "leftborderstyle": 0,
+              "leftborderwidth": 1,
+              "topbordercolor": "#000000",
+              "topborderstyle": 0,
+              "topborderwidth": 1,
+              "rightbordercolor": "#000000",
+              "rightborderstyle": 0,
+              "rightborderwidth": 1,
+              "bottombordercolor": "#000000",
+              "bottomborderstyle": 0,
+              "bottomborderwidth": 1
+            },
+            "text": {
+              "baseline": "alphabetic",
+              "valign": 2,
+              "halign": 3,
+              "fontsize": 9,
+              "fontname": "Verdana",
+              "fontcolor": "#000000",
+              "fontstyle": 0,
+              "vposition": 3,
+              "hpostion": 3,
+              "richtext": true,
+              "lineheight": 1.2,
+              "numberformat": "General",
+              "localculture": "general"
+            }
+          }
+        }
+      },
+      "graph": {
+        "id": "SkHS206JD",
+        "graphdef": {
+          "type": "machinegraph",
+          "version": "2",
+          "uniqueid": "1",
+          "o-outbox": {
+            "split": "5000",
+            "width": "5000"
+          },
+          "a-graphitem": [
+            {
+              "id": "1000",
+              "o-attributes": {
+                "o-sheetid": {
+                  "v": "Sk7ErnRTJD",
+                  "t": "s"
+                }
+              },
+              "o-pin": {
+                "o-p": {
+                  "o-x": {
+                    "v": "16933"
+                  },
+                  "o-y": {
+                    "v": "7814"
+                  }
+                },
+                "o-lp": {
+                  "o-x": {
+                    "f": "WIDTH%20*%200.5",
+                    "v": "16433"
+                  },
+                  "o-y": {
+                    "f": "HEIGHT%20*%200.5",
+                    "v": "7314"
+                  }
+                }
+              },
+              "o-size": {
+                "o-w": {
+                  "v": "32867"
+                },
+                "o-h": {
+                  "v": "14628"
+                }
+              },
+              "o-inbox": {
+                "split": "5000",
+                "width": "6111"
+              },
+              "o-processsheet": {
+                "o-attributes": {
+                  "o-calcondemand": {
+                    "v": "true",
+                    "t": "b"
+                  }
+                },
+                "o-name": {
+                  "v": "S1",
+                  "t": "s"
+                },
+                "o-rows": {
+                  "a-section": [
+                    {
+                      "index": "0",
+                      "size": "2140",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "1",
+                      "size": "2458",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "2",
+                      "size": "632",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "15",
+                      "size": "1003",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "16",
+                      "size": "738",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "17",
+                      "size": "738",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "18",
+                      "size": "1161",
+                      "visible": "1"
+                    }
+                  ]
+                },
+                "o-columns": {
+                  "a-section": [
+                    {
+                      "index": "0",
+                      "size": "0",
+                      "visible": "0"
+                    },
+                    {
+                      "index": "1",
+                      "size": "515",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "2",
+                      "size": "0",
+                      "visible": "0"
+                    },
+                    {
+                      "index": "3",
+                      "size": "0",
+                      "visible": "0"
+                    },
+                    {
+                      "index": "4",
+                      "size": "0",
+                      "visible": "0"
+                    },
+                    {
+                      "index": "5",
+                      "size": "0",
+                      "visible": "0"
+                    },
+                    {
+                      "index": "6",
+                      "size": "4175",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "7",
+                      "size": "1086",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "8",
+                      "size": "1921",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "9",
+                      "size": "3561",
+                      "visible": "1"
+                    },
+                    {
+                      "index": "13",
+                      "size": "1418",
+                      "visible": "1"
+                    }
+                  ]
+                },
+                "o-drawings": {
+                  "a-graphitem": [
+                    {
+                      "id": "70847796661",
+                      "parentid": "1028",
+                      "o-al": {
+                        "n": "model.attributes",
+                        "cl": "JSG.AttributeList",
+                        "a-al": [
+                          {
+                            "n": "format",
+                            "cl": "FormatAttributes",
+                            "a-al": [
+                              {
+                                "n": "fillcolor",
+                                "o-vl": {
+                                  "v": "%23345678",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          },
+                          {
+                            "n": "graphitem",
+                            "cl": "ItemAttributes",
+                            "a-al": [
+                              {
+                                "n": "sheetformula",
+                                "o-vl": {
+                                  "f": "DRAW.POLYGON(~2270847796661~22%2C%2C~22Polygon1~22%2C12289%2C2675%2C18415%2C3493%2C%2C~22%23345678~22)",
+                                  "v": "0"
+                                }
+                              },
+                              {
+                                "n": "sheetsource",
+                                "cl": "StringAttribute",
+                                "o-vl": {
+                                  "v": "name",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          }
+                        ]
+                      },
+                      "o-type": {
+                        "v": "rectCornerCutSame",
+                        "t": "s"
+                      },
+                      "o-name": {
+                        "v": "Polygon1",
+                        "t": "s"
+                      },
+                      "o-pin": {
+                        "o-p": {
+                          "o-x": {
+                            "v": "12289"
+                          },
+                          "o-y": {
+                            "v": "2675"
+                          }
+                        },
+                        "o-lp": {
+                          "o-x": {
+                            "f": "WIDTH%20*%200.5",
+                            "v": "9208"
+                          },
+                          "o-y": {
+                            "f": "HEIGHT%20*%200.5",
+                            "v": "1746"
+                          }
+                        }
+                      },
+                      "o-size": {
+                        "o-w": {
+                          "v": "18415"
+                        },
+                        "o-h": {
+                          "v": "3493"
+                        }
+                      },
+                      "o-rscoordinates": {
+                        "a-c": [
+                          {
+                            "name": "CUTTOP",
+                            "xtype": "13",
+                            "ytype": "-1",
+                            "xMax": "0.5",
+                            "o-x": {
+                              "v": "0.10"
+                            },
+                            "o-y": {
+                              "v": "0.00"
+                            }
+                          },
+                          {
+                            "name": "CUTBOTTOM",
+                            "xtype": "13",
+                            "ytype": "-1",
+                            "xMax": "0.5",
+                            "yMin": "1",
+                            "yMax": "1",
+                            "o-x": {
+                              "v": "0.00"
+                            },
+                            "o-y": {
+                              "v": "1.00"
+                            }
+                          }
+                        ]
+                      },
+                      "o-shape": {
+                        "type": "polygon",
+                        "o-cs": {
+                          "a-c": [
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20CUTTOP",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20CUTTOP",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20CUTBOTTOM",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20CUTBOTTOM",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT",
+                                "v": "3493"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20CUTBOTTOM",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT",
+                                "v": "3493"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH",
+                                "v": "18415"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20CUTBOTTOM",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH",
+                                "v": "18415"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20CUTTOP",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20CUTTOP",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "v": "0"
+                              }
+                            }
+                          ]
+                        }
+                      },
+                      "type": "node"
+                    },
+                    {
+                      "id": "555401109981",
+                      "parentid": "1028",
+                      "o-al": {
+                        "n": "model.attributes",
+                        "cl": "JSG.AttributeList",
+                        "a-al": [
+                          {
+                            "n": "graphitem",
+                            "cl": "ItemAttributes",
+                            "a-al": [
+                              {
+                                "n": "portmode",
+                                "o-vl": {
+                                  "v": "0"
+                                }
+                              },
+                              {
+                                "n": "sheetformula",
+                                "o-vl": {
+                                  "f": "DRAW.CHART(~22555401109981~22%2C%2C~22Chart1~22%2C15262%2C7480%2C8149%2C5080%2C%2C%2C%2C%2C%2C%2C~22column~22%2CS1!G4%3AH13)",
+                                  "v": "0"
+                                }
+                              },
+                              {
+                                "n": "sheetsource",
+                                "cl": "StringAttribute",
+                                "o-vl": {
+                                  "v": "name",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          }
+                        ]
+                      },
+                      "o-name": {
+                        "v": "Chart1",
+                        "t": "s"
+                      },
+                      "o-pin": {
+                        "o-p": {
+                          "o-x": {
+                            "v": "15262"
+                          },
+                          "o-y": {
+                            "v": "7480"
+                          }
+                        },
+                        "o-lp": {
+                          "o-x": {
+                            "f": "WIDTH%20*%200.5",
+                            "v": "4074"
+                          },
+                          "o-y": {
+                            "f": "HEIGHT%20*%200.5",
+                            "v": "2540"
+                          }
+                        }
+                      },
+                      "o-size": {
+                        "o-w": {
+                          "v": "8149"
+                        },
+                        "o-h": {
+                          "v": "5080"
+                        }
+                      },
+                      "o-shape": {
+                        "type": "rectangle"
+                      },
+                      "type": "chartnode",
+                      "data": "{&quot;chartType&quot;:&quot;column&quot;,&quot;coherent&quot;:true,&quot;hasCategoryLabels&quot;:&quot;first&quot;,&quot;hasSeriesLabels&quot;:&quot;first&quot;,&quot;categoryLabelData&quot;:[&quot; 14:46:20 GM&quot;,&quot; 14:46:21 GM&quot;,&quot; 14:46:22 GM&quot;,&quot; 14:46:23 GM&quot;,&quot; 14:46:24 GM&quot;,&quot; 14:46:25 GM&quot;,&quot; 14:46:26 GM&quot;,&quot; 14:46:27 GM&quot;,&quot; 14:46:28 GM&quot;,&quot; 14:46:29 GM&quot;],&quot;direction&quot;:&quot;columns&quot;,&quot;range&quot;:&quot;=S1!G4:H13&quot;,&quot;formatRange&quot;:&quot;&quot;,&quot;categoryRange&quot;:&quot;=E5:E14&quot;,&quot;stacked&quot;:false,&quot;smooth&quot;:true,&quot;step&quot;:false,&quot;fill&quot;:false,&quot;hideEmpty&quot;:&quot;none&quot;,&quot;angle&quot;:6.283185307179586,&quot;series&quot;:[{&quot;categoryLabels&quot;:&quot;=E5:E14&quot;,&quot;seriesLabelRange&quot;:&quot;=F4&quot;,&quot;data&quot;:&quot;=F5:F14&quot;,&quot;seriesLabel&quot;:&quot;Temperature&quot;,&quot;fillColor&quot;:&quot;#4a90e2&quot;,&quot;lineColor&quot;:&quot;#4a90e2&quot;}]}",
+                      "title": "{&quot;title&quot;:&quot;&quot;,&quot;font&quot;:{&quot;fontName&quot;:&quot;Verdana&quot;,&quot;fontSize&quot;:&quot;12&quot;,&quot;bold&quot;:false,&quot;italic&quot;:false,&quot;color&quot;:&quot;#000000&quot;}}",
+                      "legend": "{&quot;position&quot;:&quot;top&quot;,&quot;font&quot;:{&quot;fontName&quot;:&quot;Verdana&quot;,&quot;fontSize&quot;:&quot;7&quot;,&quot;bold&quot;:false,&quot;italic&quot;:false,&quot;color&quot;:&quot;#000000&quot;}}",
+                      "scales": "{&quot;xAxes&quot;:[{&quot;id&quot;:&quot;XAxis1&quot;,&quot;ticks&quot;:{&quot;fontFamily&quot;:&quot;Verdana&quot;,&quot;fontSize&quot;:&quot;7&quot;,&quot;fontColor&quot;:&quot;#000000&quot;,&quot;fontStyle&quot;:&quot;normal&quot;,&quot;minRotation&quot;:0,&quot;maxRotation&quot;:90,&quot;reverse&quot;:false},&quot;gridLines&quot;:{&quot;display&quot;:false,&quot;color&quot;:&quot;#DDDDDD&quot;},&quot;stacked&quot;:false,&quot;type&quot;:&quot;category&quot;,&quot;position&quot;:&quot;bottom&quot;,&quot;scaleLabel&quot;:{&quot;labelString&quot;:&quot;Time&quot;,&quot;display&quot;:true}}],&quot;yAxes&quot;:[{&quot;id&quot;:&quot;YAxis1&quot;,&quot;ticks&quot;:{&quot;fontFamily&quot;:&quot;Verdana&quot;,&quot;fontSize&quot;:&quot;7&quot;,&quot;fontColor&quot;:&quot;#000000&quot;,&quot;fontStyle&quot;:&quot;bold&quot;,&quot;minRotation&quot;:0,&quot;maxRotation&quot;:90,&quot;reverse&quot;:false,&quot;min&quot;:20},&quot;gridLines&quot;:{&quot;display&quot;:true,&quot;color&quot;:&quot;#DDDDDD&quot;},&quot;stacked&quot;:false,&quot;type&quot;:&quot;linear&quot;,&quot;position&quot;:&quot;left&quot;,&quot;scaleLabel&quot;:{&quot;labelString&quot;:&quot;Temperature (ºC)&quot;,&quot;display&quot;:true}}]}"
+                    },
+                    {
+                      "id": "60201705755",
+                      "parentid": "1028",
+                      "o-al": {
+                        "n": "model.attributes",
+                        "cl": "JSG.AttributeList",
+                        "a-al": [
+                          {
+                            "n": "format",
+                            "cl": "FormatAttributes",
+                            "a-al": [
+                              {
+                                "n": "fillstyle",
+                                "o-vl": {
+                                  "v": "3"
+                                }
+                              },
+                              {
+                                "n": "linecolor",
+                                "o-vl": {
+                                  "v": "None",
+                                  "t": "s"
+                                }
+                              },
+                              {
+                                "n": "linestyle",
+                                "o-vl": {
+                                  "v": "0"
+                                }
+                              }
+                            ]
+                          },
+                          {
+                            "n": "graphitem",
+                            "cl": "ItemAttributes",
+                            "a-al": [
+                              {
+                                "n": "sheetformula",
+                                "o-vl": {
+                                  "f": "DRAW.RECTANGLE(~2260201705755~22%2C%2C~22Rectangle9~22%2C12355%2C2700%2C7091%2C1984%2C~22None~22%2CFILLPATTERN(~22https%3A%2F%2Fwww.basys40.de%2Fwp-content%2Fuploads%2F2019%2F12%2FLogo_BaSys4_1024px-300x79.png~22))",
+                                  "v": "0"
+                                }
+                              },
+                              {
+                                "n": "sheetsource",
+                                "cl": "StringAttribute",
+                                "o-vl": {
+                                  "v": "name",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          }
+                        ]
+                      },
+                      "o-name": {
+                        "v": "Rectangle9",
+                        "t": "s"
+                      },
+                      "o-pin": {
+                        "o-p": {
+                          "o-x": {
+                            "v": "12355"
+                          },
+                          "o-y": {
+                            "v": "2700"
+                          }
+                        },
+                        "o-lp": {
+                          "o-x": {
+                            "f": "WIDTH%20*%200.5",
+                            "v": "3545"
+                          },
+                          "o-y": {
+                            "f": "HEIGHT%20*%200.5",
+                            "v": "992"
+                          }
+                        }
+                      },
+                      "o-size": {
+                        "o-w": {
+                          "v": "7091"
+                        },
+                        "o-h": {
+                          "v": "1984"
+                        }
+                      },
+                      "o-shape": {
+                        "type": "rectangle"
+                      },
+                      "type": "node"
+                    },
+                    {
+                      "id": "488440667154",
+                      "parentid": "1028",
+                      "o-al": {
+                        "n": "model.attributes",
+                        "cl": "JSG.AttributeList",
+                        "a-al": [
+                          {
+                            "n": "format",
+                            "cl": "FormatAttributes",
+                            "a-al": [
+                              {
+                                "n": "fillcolor",
+                                "o-vl": {
+                                  "v": "%23345678",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          },
+                          {
+                            "n": "graphitem",
+                            "cl": "ItemAttributes",
+                            "a-al": [
+                              {
+                                "n": "sheetformula",
+                                "o-vl": {
+                                  "f": "DRAW.RECTANGLE(~22488440667154~22%2C%2C~22Rectangle10~22%2C3967%2C9421%2C1773%2C10001%2C%2C~22%23345678~22)",
+                                  "v": "0"
+                                }
+                              },
+                              {
+                                "n": "sheetsource",
+                                "cl": "StringAttribute",
+                                "o-vl": {
+                                  "v": "name",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          }
+                        ]
+                      },
+                      "o-name": {
+                        "v": "Rectangle10",
+                        "t": "s"
+                      },
+                      "o-pin": {
+                        "o-p": {
+                          "o-x": {
+                            "v": "3967"
+                          },
+                          "o-y": {
+                            "v": "9421"
+                          }
+                        },
+                        "o-lp": {
+                          "o-x": {
+                            "f": "WIDTH%20*%200.5",
+                            "v": "886"
+                          },
+                          "o-y": {
+                            "f": "HEIGHT%20*%200.5",
+                            "v": "5001"
+                          }
+                        }
+                      },
+                      "o-size": {
+                        "o-w": {
+                          "v": "1773"
+                        },
+                        "o-h": {
+                          "v": "10001"
+                        }
+                      },
+                      "o-shape": {
+                        "type": "rectangle"
+                      },
+                      "type": "node"
+                    },
+                    {
+                      "id": "919991966926",
+                      "parentid": "1028",
+                      "o-al": {
+                        "n": "model.attributes",
+                        "cl": "JSG.AttributeList",
+                        "a-al": [
+                          {
+                            "n": "format",
+                            "cl": "FormatAttributes",
+                            "a-al": [
+                              {
+                                "n": "fillcolor",
+                                "o-vl": {
+                                  "v": "%23345678",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          },
+                          {
+                            "n": "graphitem",
+                            "cl": "ItemAttributes",
+                            "a-al": [
+                              {
+                                "n": "sheetformula",
+                                "o-vl": {
+                                  "f": "DRAW.RECTANGLE(~22919991966926~22%2C%2C~22Rectangle11~22%2C20623%2C9433%2C1746%2C10001%2C%2C~22%23345678~22)",
+                                  "v": "0"
+                                }
+                              },
+                              {
+                                "n": "sheetsource",
+                                "cl": "StringAttribute",
+                                "o-vl": {
+                                  "v": "name",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          },
+                          {
+                            "n": "textformat",
+                            "cl": "TextFormatAttributes",
+                            "pl": "tl:TextFormatAttributes.Template",
+                            "a-al": [
+                              {
+                                "n": "richtext",
+                                "o-vl": {
+                                  "v": "false",
+                                  "t": "b"
+                                }
+                              }
+                            ]
+                          }
+                        ]
+                      },
+                      "o-name": {
+                        "v": "Rectangle11",
+                        "t": "s"
+                      },
+                      "o-pin": {
+                        "o-p": {
+                          "o-x": {
+                            "v": "20623"
+                          },
+                          "o-y": {
+                            "v": "9433"
+                          }
+                        },
+                        "o-lp": {
+                          "o-x": {
+                            "f": "WIDTH%20*%200.5",
+                            "v": "873"
+                          },
+                          "o-y": {
+                            "f": "HEIGHT%20*%200.5",
+                            "v": "5001"
+                          }
+                        }
+                      },
+                      "o-size": {
+                        "o-w": {
+                          "v": "1746"
+                        },
+                        "o-h": {
+                          "v": "10001"
+                        }
+                      },
+                      "o-shape": {
+                        "type": "rectangle"
+                      },
+                      "type": "node"
+                    },
+                    {
+                      "id": "962757771226",
+                      "parentid": "1028",
+                      "o-al": {
+                        "n": "model.attributes",
+                        "cl": "JSG.AttributeList",
+                        "a-al": [
+                          {
+                            "n": "format",
+                            "cl": "FormatAttributes",
+                            "a-al": [
+                              {
+                                "n": "fillcolor",
+                                "o-vl": {
+                                  "v": "%23345678",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          },
+                          {
+                            "n": "graphitem",
+                            "cl": "ItemAttributes",
+                            "a-al": [
+                              {
+                                "n": "sheetformula",
+                                "o-vl": {
+                                  "f": "DRAW.RECTANGLE(~22962757771226~22%2C%2C~22Rectangle12~22%2C12302%2C11081%2C14896%2C1376%2C%2C~22%23345678~22)",
+                                  "v": "0"
+                                }
+                              },
+                              {
+                                "n": "sheetsource",
+                                "cl": "StringAttribute",
+                                "o-vl": {
+                                  "v": "name",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          },
+                          {
+                            "n": "textformat",
+                            "cl": "TextFormatAttributes",
+                            "pl": "tl:TextFormatAttributes.Template",
+                            "a-al": [
+                              {
+                                "n": "richtext",
+                                "o-vl": {
+                                  "v": "false",
+                                  "t": "b"
+                                }
+                              }
+                            ]
+                          }
+                        ]
+                      },
+                      "o-name": {
+                        "v": "Rectangle12",
+                        "t": "s"
+                      },
+                      "o-pin": {
+                        "o-p": {
+                          "o-x": {
+                            "v": "12302"
+                          },
+                          "o-y": {
+                            "v": "11081"
+                          }
+                        },
+                        "o-lp": {
+                          "o-x": {
+                            "f": "WIDTH%20*%200.5",
+                            "v": "7448"
+                          },
+                          "o-y": {
+                            "f": "HEIGHT%20*%200.5",
+                            "v": "688"
+                          }
+                        }
+                      },
+                      "o-size": {
+                        "o-w": {
+                          "v": "14896"
+                        },
+                        "o-h": {
+                          "v": "1376"
+                        }
+                      },
+                      "o-shape": {
+                        "type": "rectangle"
+                      },
+                      "type": "node"
+                    },
+                    {
+                      "id": "692699117567",
+                      "parentid": "1028",
+                      "o-al": {
+                        "n": "model.attributes",
+                        "cl": "JSG.AttributeList",
+                        "a-al": [
+                          {
+                            "n": "graphitem",
+                            "cl": "ItemAttributes",
+                            "a-al": [
+                              {
+                                "n": "sheetformula",
+                                "o-vl": {
+                                  "f": "DRAW.BEZIER(~22692699117567~22%2C%2C~22Bezier1~22%2C17647%2C13394%2C212%2C1164)",
+                                  "v": "0"
+                                }
+                              },
+                              {
+                                "n": "sheetsource",
+                                "cl": "StringAttribute",
+                                "o-vl": {
+                                  "v": "name",
+                                  "t": "s"
+                                }
+                              }
+                            ]
+                          }
+                        ]
+                      },
+                      "o-type": {
+                        "v": "roundRectCornerCutSame",
+                        "t": "s"
+                      },
+                      "o-name": {
+                        "v": "Bezier1",
+                        "t": "s"
+                      },
+                      "o-pin": {
+                        "o-p": {
+                          "o-x": {
+                            "v": "17647"
+                          },
+                          "o-y": {
+                            "v": "13394"
+                          }
+                        },
+                        "o-lp": {
+                          "o-x": {
+                            "f": "WIDTH%20*%200.5",
+                            "v": "106"
+                          },
+                          "o-y": {
+                            "f": "HEIGHT%20*%200.5",
+                            "v": "582"
+                          }
+                        }
+                      },
+                      "o-size": {
+                        "o-w": {
+                          "v": "212"
+                        },
+                        "o-h": {
+                          "v": "1164"
+                        }
+                      },
+                      "o-rscoordinates": {
+                        "a-c": [
+                          {
+                            "name": "ROUND",
+                            "xtype": "14",
+                            "ytype": "-1",
+                            "xMax": "0.5",
+                            "o-x": {
+                              "v": "0.10"
+                            },
+                            "o-y": {
+                              "v": "0.00"
+                            }
+                          },
+                          {
+                            "name": "ROUND2",
+                            "xtype": "13",
+                            "ytype": "-1",
+                            "xMax": "0.5",
+                            "yMin": "1",
+                            "yMax": "1",
+                            "o-x": {
+                              "v": "0.00"
+                            },
+                            "o-y": {
+                              "v": "1.00"
+                            }
+                          }
+                        ]
+                      },
+                      "o-shape": {
+                        "type": "bezier",
+                        "o-cs": {
+                          "a-c": [
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH",
+                                "v": "212"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH",
+                                "v": "212"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT%20-%20ROUND2%20*%20MIN(WIDTH%2C%20HEIGHT)",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND2",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT",
+                                "v": "1164"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND2",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT",
+                                "v": "1164"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND2",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND",
+                                "v": "0"
+                              }
+                            }
+                          ]
+                        },
+                        "o-cpfrom": {
+                          "a-c": [
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND%20*%200.45",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%200.6",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH",
+                                "v": "212"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND%20*%200.45",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH",
+                                "v": "212"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%200.6",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND2%20*%200.45",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT",
+                                "v": "1164"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%200.4",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT",
+                                "v": "1164"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND2%20*%200.45",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%200.4",
+                                "v": "0"
+                              }
+                            }
+                          ]
+                        },
+                        "o-cpto": {
+                          "a-c": [
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%200.4",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND%20*%200.45",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH",
+                                "v": "212"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%200.4",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "WIDTH",
+                                "v": "212"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT%20-%20MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND2%20*%200.45",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%200.6",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT",
+                                "v": "1164"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND2%20*%200.45",
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT",
+                                "v": "1164"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%200.6",
+                                "v": "0"
+                              }
+                            },
+                            {
+                              "o-x": {
+                                "v": "0"
+                              },
+                              "o-y": {
+                                "f": "MIN(WIDTH%2C%20HEIGHT)%20*%20ROUND%20*%200.45",
+                                "v": "0"
+                              }
+                            }
+                          ],
+                          "pie": "false"
+                        }
+                      },
+                      "a-graphitem": [
+                        {
+                          "id": "426951475952",
+                          "parentid": "692699117567",
+                          "o-al": {
+                            "n": "model.attributes",
+                            "cl": "JSG.AttributeList",
+                            "a-al": [
+                              {
+                                "n": "format",
+                                "cl": "FormatAttributes",
+                                "a-al": [
+                                  {
+                                    "n": "fillcolor",
+                                    "o-vl": {
+                                      "v": "%23ff0000",
+                                      "t": "s"
+                                    }
+                                  }
+                                ]
+                              },
+                              {
+                                "n": "graphitem",
+                                "cl": "ItemAttributes",
+                                "a-al": [
+                                  {
+                                    "n": "sheetformula",
+                                    "o-vl": {
+                                      "f": "DRAW.ELLIPSE(~22426951475952~22%2C~22Bezier1~22%2C~22Ellipse1~22%2C106%2C1032%2C529%2C529%2C%2C~22%23ff0000~22)",
+                                      "v": "0"
+                                    }
+                                  },
+                                  {
+                                    "n": "sheetsource",
+                                    "cl": "StringAttribute",
+                                    "o-vl": {
+                                      "v": "name",
+                                      "t": "s"
+                                    }
+                                  }
+                                ]
+                              }
+                            ]
+                          },
+                          "o-name": {
+                            "v": "Ellipse1",
+                            "t": "s"
+                          },
+                          "o-pin": {
+                            "o-p": {
+                              "o-x": {
+                                "v": "106"
+                              },
+                              "o-y": {
+                                "v": "1032"
+                              }
+                            },
+                            "o-lp": {
+                              "o-x": {
+                                "f": "WIDTH%20*%200.5",
+                                "v": "265"
+                              },
+                              "o-y": {
+                                "f": "HEIGHT%20*%200.5",
+                                "v": "265"
+                              }
+                            }
+                          },
+                          "o-size": {
+                            "o-w": {
+                              "v": "529"
+                            },
+                            "o-h": {
+                              "v": "529"
+                            }
+                          },
+                          "o-shape": {
+                            "type": "ellipse",
+                            "o-cs": {
+                              "a-c": [
+                                {
+                                  "o-x": {
+                                    "f": "WIDTH%20*%200.5",
+                                    "v": "265"
+                                  },
+                                  "o-y": {
+                                    "v": "0"
+                                  }
+                                },
+                                {
+                                  "o-x": {
+                                    "f": "WIDTH",
+                                    "v": "529"
+                                  },
+                                  "o-y": {
+                                    "f": "HEIGHT%20*%200.5",
+                                    "v": "265"
+                                  }
+                                },
+                                {
+                                  "o-x": {
+                                    "f": "WIDTH%20*%200.5",
+                                    "v": "265"
+                                  },
+                                  "o-y": {
+                                    "f": "HEIGHT",
+                                    "v": "529"
+                                  }
+                                },
+                                {
+                                  "o-x": {
+                                    "v": "0"
+                                  },
+                                  "o-y": {
+                                    "f": "HEIGHT%20*%200.5",
+                                    "v": "265"
+                                  }
+                                }
+                              ]
+                            },
+                            "o-cpfrom": {
+                              "a-c": [
+                                {
+                                  "o-x": {
+                                    "f": "WIDTH%20*%200.225",
+                                    "v": "119"
+                                  },
+                                  "o-y": {
+                                    "v": "0"
+                                  }
+                                },
+                                {
+                                  "o-x": {
+                                    "f": "WIDTH",
+                                    "v": "529"
+                                  },
+                                  "o-y": {
+                                    "f": "HEIGHT%20*%200.225",
+                                    "v": "119"
+                                  }
+                                },
+                                {
+                                  "o-x": {
+                                    "f": "WIDTH%20*%200.775",
+                                    "v": "410"
+                                  },
+                                  "o-y": {
+                                    "f": "HEIGHT",
+                                    "v": "529"
+                                  }
+                                },
+                                {
+                                  "o-x": {
+                                    "v": "0"
+                                  },
+                                  "o-y": {
+                                    "f": "HEIGHT%20*%200.775",
+                                    "v": "410"
+                                  }
+                                }
+                              ]
+                            },
+                            "o-cpto": {
+                              "a-c": [
+                                {
+                                  "o-x": {
+                                    "f": "WIDTH%20*%200.775",
+                                    "v": "410"
+                                  },
+                                  "o-y": {
+                                    "v": "0"
+                                  }
+                                },
+                                {
+                                  "o-x": {
+                                    "f": "WIDTH",
+                                    "v": "529"
+                                  },
+                                  "o-y": {
+                                    "f": "HEIGHT%20*%200.775",
+                                    "v": "410"
+                                  }
+                                },
+                                {
+                                  "o-x": {
+                                    "f": "WIDTH%20*%200.225",
+                                    "v": "119"
+                                  },
+                                  "o-y": {
+                                    "f": "HEIGHT",
+                                    "v": "529"
+                                  }
+                                },
+                                {
+                                  "o-x": {
+                                    "v": "0"
+                                  },
+                                  "o-y": {
+                                    "f": "HEIGHT%20*%200.225",
+                                    "v": "119"
+                                  }
+                                }
+                              ],
+                              "pie": "false"
+                            }
+                          },
+                          "type": "node"
+                        }
+                      ],
+                      "type": "node"
+                    }
+                  ]
+                },
+                "o-defaultcell": {
+                  "o-cell": {
+                    "o-f": {
+                      "o-fillcolor": {
+                        "v": "%23ffffff",
+                        "t": "s"
+                      },
+                      "o-fillstyle": {
+                        "v": "1"
+                      }
+                    }
+                  }
+                },
+                "o-data": {
+                  "a-r": [
+                    {
+                      "n": "0",
+                      "a-c": [
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "1",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-t": {
+                              "o-fontstyle": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "2",
+                      "a-c": [
+                        {
+                          "n": "4",
+                          "o-cell": {
+                            "o-t": {
+                              "o-fontstyle": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontsize": {
+                                "v": "12"
+                              },
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftbordercolor": {
+                                "v": "%230887fb",
+                                "t": "s"
+                              },
+                              "o-topbordercolor": {
+                                "v": "%230887fb",
+                                "t": "s"
+                              },
+                              "o-rightbordercolor": {
+                                "v": "%230887fb",
+                                "t": "s"
+                              },
+                              "o-bottombordercolor": {
+                                "v": "%230887fb",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              },
+                              "o-fontsize": {
+                                "v": "12"
+                              },
+                              "o-fontcolor": {
+                                "v": "%231758ab",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftbordercolor": {
+                                "v": "%23f8e71c",
+                                "t": "s"
+                              },
+                              "o-topbordercolor": {
+                                "v": "%23f8e71c",
+                                "t": "s"
+                              },
+                              "o-rightbordercolor": {
+                                "v": "%23f8e71c",
+                                "t": "s"
+                              },
+                              "o-bottombordercolor": {
+                                "v": "%23f8e71c",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              },
+                              "o-fontsize": {
+                                "v": "12"
+                              },
+                              "o-fontcolor": {
+                                "v": "%231758ab",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftbordercolor": {
+                                "v": "%23f8e71c",
+                                "t": "s"
+                              },
+                              "o-topbordercolor": {
+                                "v": "%23f8e71c",
+                                "t": "s"
+                              },
+                              "o-rightbordercolor": {
+                                "v": "%23f8e71c",
+                                "t": "s"
+                              },
+                              "o-bottombordercolor": {
+                                "v": "%23f8e71c",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "3",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "0",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "number%3B0%3Bfalse",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "4",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "d~5C.m~5C.yyyy%20h%3Amm",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "date%3Bde",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "5",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "d~5C.m~5C.yyyy%20h%3Amm",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "date%3Bde",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "6",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "d~5C.m~5C.yyyy%20h%3Amm",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "date%3Bde",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "7",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "d~5C.m~5C.yyyy%20h%3Amm",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "date%3Bde",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "8",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "d~5C.m~5C.yyyy%20h%3Amm",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "date%3Bde",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "9",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "d~5C.m~5C.yyyy%20h%3Amm",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "date%3Bde",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "10",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "d~5C.m~5C.yyyy%20h%3Amm",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "date%3Bde",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "11",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "d~5C.m~5C.yyyy%20h%3Amm",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "date%3Bde",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "12",
+                      "a-c": [
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "d~5C.m~5C.yyyy%20h%3Amm",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "date%3Bde",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "h%3Amm%3Ass%20AM%2FPM",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-fontcolor": {
+                                "v": "%230f4db5",
+                                "t": "s"
+                              },
+                              "o-fontsize": {
+                                "v": "10"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "hh%3Amm%3Ass",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "time%3Ben",
+                                "t": "s"
+                              },
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-halign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "13",
+                      "a-c": [
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-numberformat": {
+                                "v": "0.00",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "number%3B2%3Bfalse",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "14",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5fef3",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "15",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-fontstyle": {
+                                "v": "1"
+                              },
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              },
+                              "o-fontstyle": {
+                                "v": "1"
+                              },
+                              "o-numberformat": {
+                                "v": "0.00",
+                                "t": "s"
+                              },
+                              "o-localculture": {
+                                "v": "number%3B2%3Bfalse",
+                                "t": "s"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "16",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-fontstyle": {
+                                "v": "1"
+                              },
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              },
+                              "o-fontstyle": {
+                                "v": "1"
+                              },
+                              "o-fontcolor": {
+                                "v": "%234a90e2",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-key": {
+                                "v": "true",
+                                "t": "b"
+                              },
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "17",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              },
+                              "o-fontsize": {
+                                "v": "24"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "18",
+                      "a-c": [
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-fontstyle": {
+                                "v": "1"
+                              },
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "8",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "9",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "11",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "12",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "13",
+                          "o-cell": {
+                            "o-f": {
+                              "o-fillcolor": {
+                                "v": "%23b5b5b5",
+                                "t": "s"
+                              }
+                            },
+                            "o-a": {
+                              "o-leftborderwidth": {
+                                "v": "8"
+                              },
+                              "o-topborderwidth": {
+                                "v": "8"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "19",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-fontstyle": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "20",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-fontstyle": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "21",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-fontstyle": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "10",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "22",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "4",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "23",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "4",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "24",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "4",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "25",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "4",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "26",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "4",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    },
+                    {
+                      "n": "27",
+                      "a-c": [
+                        {
+                          "n": "1",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "2",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "3",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "4",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "5",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "6",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        },
+                        {
+                          "n": "7",
+                          "o-cell": {
+                            "o-t": {
+                              "o-valign": {
+                                "v": "1"
+                              }
+                            }
+                          }
+                        }
+                      ]
+                    }
+                  ]
+                }
+              }
+            }
+          ],
+          "o-images": {}
+        },
+        "machineId": "S1-EB3RpyP"
+      }
+    }
+  ],
+  "streams": [
+    {
+      "id": "HJZR0U1xSI",
+      "name": "AASRESTTestProducer",
+      "owner": null,
+      "disabled": false,
+      "className": "ProducerConfiguration",
+      "lastModified": "2020-09-09T12:55:45.437Z",
+      "lastAccessed": "2020-03-06T15:05:58.112Z",
+      "connector": {
+        "_id": "S1lML8ygr8",
+        "id": "S1lML8ygr8",
+        "className": "ConnectorConfiguration",
+        "owner": null,
+        "disabled": false,
+        "lastModified": "2020-09-09T12:34:12.984Z",
+        "lastAccessed": "2020-03-06T15:03:38.128Z",
+        "isRef": true
+      },
+      "samplePayloads": null,
+      "mimeType": "auto"
+    },
+    {
+      "id": "S1lML8ygr8",
+      "name": "AASRESTTestProvider",
+      "owner": null,
+      "disabled": false,
+      "className": "ConnectorConfiguration",
+      "lastModified": "2020-09-09T12:55:45.436Z",
+      "lastAccessed": "2020-03-06T15:03:38.128Z",
+      "provider": {
+        "_id": "@cedalo/stream-rest-client",
+        "id": "@cedalo/stream-rest-client",
+        "className": "ProviderConfiguration",
+        "owner": null,
+        "disabled": null,
+        "lastModified": null,
+        "lastAccessed": null,
+        "isRef": true
+      },
+      "baseUrl": "",
+      "userName": "",
+      "password": ""
+    }
+  ]
+}
\ No newline at end of file
diff --git a/examples/basyx.streamsheets/docker-compose.yml b/examples/basyx.streamsheets/docker-compose.yml
new file mode 100644
index 0000000..77d723d
--- /dev/null
+++ b/examples/basyx.streamsheets/docker-compose.yml
@@ -0,0 +1,34 @@
+version: '3'
+services:
+
+  registry:
+    image: basyx/registry:0.1.0-SNAPSHOT
+    container_name: dashboard-registry
+    ports:
+      - 4000:4000
+
+  dashboard-aas:
+    image: basyx/dashboard-aas:0.1.0-SNAPSHOT
+    container_name: dashboard-aas
+    environment:
+      - BaSyxDashboardSubmodel_Min=15
+#      - BaSyxDashboardSubmodel_Max=30
+    ports:
+      - 6400:6400
+
+  aas-wrapper:
+    image: basyx/aas-wrapper:0.1.0-SNAPSHOT
+    container_name: aas-wrapper
+    ports:
+      - 6500:6500
+
+  streamsheets:
+    image: cedalo/streamsheets:1.5
+    container_name: streamsheets
+    ports:
+      - 8081:8081
+      - 8083:8083
+      - 1883:1883
+    volumes:
+      - ./mosquitto:/etc/mosquitto-default-credentials
+      - ./streamsheets:/var/lib/mongodb
\ No newline at end of file
diff --git a/examples/basyx.streamsheets/readme.txt b/examples/basyx.streamsheets/readme.txt
new file mode 100644
index 0000000..5023bde
--- /dev/null
+++ b/examples/basyx.streamsheets/readme.txt
@@ -0,0 +1,12 @@
+HowTo: First Setup
+------------------
+
+1. Start docker-compose
+- Run "docker-compose up" in the /streamsheets/ folder
+
+2. Open in Browser (admin/admin)
+- http://localhost:8081/
+
+3. Import dashboard from JSON (drag & drop possible)
+
+4. Run Streamsheet
diff --git a/examples/basyx.streamsheets/start.bat b/examples/basyx.streamsheets/start.bat
new file mode 100644
index 0000000..83ed0d0
--- /dev/null
+++ b/examples/basyx.streamsheets/start.bat
@@ -0,0 +1 @@
+docker-compose up
diff --git a/examples/basyx.streamsheets/start.sh b/examples/basyx.streamsheets/start.sh
new file mode 100644
index 0000000..d935e43
--- /dev/null
+++ b/examples/basyx.streamsheets/start.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose up
\ No newline at end of file
diff --git a/examples/basyx.streamsheets/stop.bat b/examples/basyx.streamsheets/stop.bat
new file mode 100644
index 0000000..58694d0
--- /dev/null
+++ b/examples/basyx.streamsheets/stop.bat
@@ -0,0 +1 @@
+docker-compose down
\ No newline at end of file
diff --git a/examples/basyx.streamsheets/stop.sh b/examples/basyx.streamsheets/stop.sh
new file mode 100644
index 0000000..f5139e2
--- /dev/null
+++ b/examples/basyx.streamsheets/stop.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+docker-compose down
\ No newline at end of file
diff --git a/examples/mvnw b/examples/mvnw
new file mode 100644
index 0000000..a16b543
--- /dev/null
+++ b/examples/mvnw
@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  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
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  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
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    if [ -n "$MVNW_REPOURL" ]; then
+      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    fi
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    if $cygwin; then
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+    fi
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget "$jarUrl" -O "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl -o "$wrapperJarPath" "$jarUrl" -f
+        else
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+        fi
+
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaClass=`cygpath --path --windows "$javaClass"`
+        fi
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/examples/mvnw.cmd b/examples/mvnw.cmd
new file mode 100644
index 0000000..c8d4337
--- /dev/null
+++ b/examples/mvnw.cmd
@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %DOWNLOAD_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/dataelement/IBlob.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/dataelement/IBlob.java
index 3b78ced..5bb8122 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/dataelement/IBlob.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/dataelement/IBlob.java
@@ -39,18 +39,18 @@
 	public void setByteArrayValue(byte[] value);
 
 	/**
-	 * Returns the ASCII String representation of the byte array BLOB value
+	 * Returns the UTF8 String representation of the byte array BLOB value
 	 *
 	 * @return
 	 */
-	public String getASCIIString();
+	public String getUTF8String();
 
 	/**
-	 * Sets an ASCII string as an encoded byte array in the BLOB data element value
+	 * Sets an UTF8 string as an encoded byte array in the BLOB data element value
 	 * 
 	 * @param text
 	 */
-	public void setASCIIString(String text);
+	public void setUTF8String(String text);
 
 	/**
 	 * Gets the mime type of the content of the BLOB. The mime type states which
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/dataelement/ConnectedBlob.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/dataelement/ConnectedBlob.java
index 0cfcebe..791d10a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/dataelement/ConnectedBlob.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/dataelement/ConnectedBlob.java
@@ -72,13 +72,13 @@
 	}
 
 	@Override
-	public String getASCIIString() {
-		return getLocalCopy().getASCIIString();
+	public String getUTF8String() {
+		return getLocalCopy().getUTF8String();
 	}
 
 	@Override
-	public void setASCIIString(String text) {
-		byte[] byteArray = text.getBytes(StandardCharsets.US_ASCII);
+	public void setUTF8String(String text) {
+		byte[] byteArray = text.getBytes(StandardCharsets.UTF_8);
 		setByteArrayValue(byteArray);
 	}
 }
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/dataelement/Blob.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/dataelement/Blob.java
index 084d458..e6539f6 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/dataelement/Blob.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/dataelement/Blob.java
@@ -126,14 +126,14 @@
 	}
 
 	@Override
-	public String getASCIIString() {
+	public String getUTF8String() {
 		byte[] value = getByteArrayValue();
-		return new String(value, StandardCharsets.US_ASCII);
+		return new String(value, StandardCharsets.UTF_8);
 	}
 
 	@Override
-	public void setASCIIString(String text) {
-		setByteArrayValue(text.getBytes(StandardCharsets.US_ASCII));
+	public void setUTF8String(String text) {
+		setByteArrayValue(text.getBytes(StandardCharsets.UTF_8));
 	}
 
 	public void setMimeType(String mimeType) {
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/DigitalNameplateSubmodel.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/DigitalNameplateSubmodel.java
new file mode 100644
index 0000000..a29b4f5
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/DigitalNameplateSubmodel.java
@@ -0,0 +1,432 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IMultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Address;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties.AssetSpecificProperties;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings.Markings;
+
+/**
+ * DigitalNameplateSubmodel as defined in the AAS Digital Nameplate Template document <br/>
+ * this contains the nameplate information attached to the product
+ * 
+ * @author haque
+ *
+ */
+public class DigitalNameplateSubmodel extends SubModel {
+	public static final String MANUFACTURERNAMEID = "ManufacturerName";
+	public static final String MANUFACTURERPRODUCTDESIGNATIONID = "ManufacturerProductDesignation";
+	public static final String ADDRESSID = "Address";
+	public static final String MANUFACTURERPRODUCTFAMILYID = "ManufacturerProductFamily";
+	public static final String SERIALNUMBERID = "SerialNumber";
+	public static final String YEARSOFCONSTRUCTIONID = "YearOfConstruction";
+	public static final String MARKINGSID = "Markings";
+	public static final String ASSETSPECIFICPROPERTIESID = "AssetSpecificProperties";
+	public static final Reference SEMANTICID = new Reference(Collections.singletonList(new Key(KeyElements.CONCEPTDESCRIPTION, false, "https://admin-shell.io/zvei/nameplate/1/0/Nameplate", KeyType.IRI)));
+	public static final String SUBMODELID = "Nameplate";
+	
+	private DigitalNameplateSubmodel() {}
+	
+	/**
+	 * Constructor with default idShort
+	 * @param identifier
+	 * @param manufacturerName
+	 * @param manufacturerProductDesignation
+	 * @param address
+	 * @param manufacturerProductFamily
+	 * @param yearsOfConstruction
+	 */
+	public DigitalNameplateSubmodel(
+			Identifier identifier,
+			MultiLanguageProperty manufacturerName, 
+			MultiLanguageProperty manufacturerProductDesignation, 
+			Address address, 
+			MultiLanguageProperty manufacturerProductFamily, 
+			Property yearsOfConstruction
+			) {
+		this(SUBMODELID, identifier, manufacturerName, manufacturerProductDesignation, address, manufacturerProductFamily, yearsOfConstruction);
+	}
+	
+	/**
+	 * Constructor with default idShort
+	 * @param identifier
+	 * @param manufacturerName
+	 * @param manufacturerProductDesignation
+	 * @param address
+	 * @param manufacturerProductFamily
+	 * @param yearsOfConstruction
+	 */
+	public DigitalNameplateSubmodel(
+			Identifier identifier,
+			LangString manufacturerName, 
+			LangString manufacturerProductDesignation, 
+			Address address, 
+			LangString manufacturerProductFamily, 
+			String yearsOfConstruction
+			) {
+		this(SUBMODELID, identifier, manufacturerName, manufacturerProductDesignation, address, manufacturerProductFamily, yearsOfConstruction);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param identifier
+	 * @param manufacturerName
+	 * @param manufacturerProductDesignation
+	 * @param address
+	 * @param manufacturerProductFamily
+	 * @param yearsOfConstruction
+	 */
+	public DigitalNameplateSubmodel(
+			String idShort, 
+			Identifier identifier,
+			MultiLanguageProperty manufacturerName, 
+			MultiLanguageProperty manufacturerProductDesignation, 
+			Address address, 
+			MultiLanguageProperty manufacturerProductFamily, 
+			Property yearsOfConstruction
+			) {
+		super(idShort, identifier);
+		setSemanticId(SEMANTICID);
+		setManufacturerName(manufacturerName);
+		setManufacturerProductDesignation(manufacturerProductDesignation);
+		setAddress(address);
+		setManufacturerProductFamily(manufacturerProductFamily);
+		setYearOfConstruction(yearsOfConstruction);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param identifier
+	 * @param manufacturerName
+	 * @param manufacturerProductDesignation
+	 * @param address
+	 * @param manufacturerProductFamily
+	 * @param yearsOfConstruction
+	 */
+	public DigitalNameplateSubmodel(
+			String idShort, 
+			Identifier identifier,
+			LangString manufacturerName, 
+			LangString manufacturerProductDesignation, 
+			Address address, 
+			LangString manufacturerProductFamily, 
+			String yearsOfConstruction
+			) {
+		super(idShort, identifier);
+		setSemanticId(SEMANTICID);
+		setManufacturerName(manufacturerName);
+		setManufacturerProductDesignation(manufacturerProductDesignation);
+		setAddress(address);
+		setManufacturerProductFamily(manufacturerProductFamily);
+		setYearOfConstruction(yearsOfConstruction);
+	}
+	
+	/**
+	 * Creates a DigitalNameplateSubmodel object from a map
+	 * 
+	 * @param obj a DigitalNameplateSubmodel SMC object as raw map
+	 * @return a DigitalNameplateSubmodel SMC object, that behaves like a facade for the given map
+	 */
+	public static DigitalNameplateSubmodel createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(DigitalNameplateSubmodel.class, obj);
+		}
+		
+		DigitalNameplateSubmodel ret = new DigitalNameplateSubmodel();
+		ret.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSM(obj));
+		return ret;
+	}
+	
+	/**
+	 * Creates a DigitalNameplateSubmodel object from a map without validation
+	 * 
+	 * @param obj a DigitalNameplateSubmodel SMC object as raw map
+	 * @return a DigitalNameplateSubmodel SMC object, that behaves like a facade for the given map
+	 */
+	private static DigitalNameplateSubmodel createAsFacadeNonStrict(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		DigitalNameplateSubmodel ret = new DigitalNameplateSubmodel();
+		ret.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSM(obj));
+		return ret;
+	}
+	
+	/**
+	 * Check whether all mandatory elements for DigitalNameplateSubmodel
+	 * exist in the map
+	 * 
+	 * @param obj
+	 * 
+	 * @return true/false
+	 */
+	@SuppressWarnings("unchecked")
+	public static boolean isValid(Map<String, Object> obj) {
+		DigitalNameplateSubmodel submodel = createAsFacadeNonStrict(obj);
+		
+		return SubModel.isValid(obj)
+				&& MultiLanguageProperty.isValid((Map<String, Object>) submodel.getManufacturerName())
+				&& MultiLanguageProperty.isValid((Map<String, Object>) submodel.getManufacturerProductDesignation())
+				&& Address.isValid((Map<String, Object>) submodel.getAddress())
+				&& MultiLanguageProperty.isValid((Map<String, Object>) submodel.getManufacturerProductFamily())
+				&& Property.isValid((Map<String, Object>) submodel.getYearOfConstruction());
+	}
+	
+	/**
+	 * sets manufacturerName
+	 * legally valid designation of the natural or judicial person which is directly
+     * responsible for the design, production, packaging and labeling of a product
+     * in respect to its being brought into circulation
+     * Note: mandatory property according to EU Machine Directive
+     * 2006/42/EC.
+	 * @param manufacturerName {@link MultiLanguageProperty}
+	 */
+	public void setManufacturerName(MultiLanguageProperty manufacturerName) {
+		addSubModelElement(manufacturerName);
+	}
+	
+	/**
+	 * sets manufacturerName
+	 * legally valid designation of the natural or judicial person which is directly
+     * responsible for the design, production, packaging and labeling of a product
+     * in respect to its being brought into circulation
+     * Note: mandatory property according to EU Machine Directive
+     * 2006/42/EC.
+	 * @param manufacturerName {@link LangString}
+	 */
+	public void setManufacturerName(LangString manufacturerName) {
+		MultiLanguageProperty manufacturerNameProp = new MultiLanguageProperty(MANUFACTURERNAMEID);
+		manufacturerNameProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO677#002", IdentifierType.IRDI)));
+		manufacturerNameProp.setValue(new LangStrings(manufacturerName));
+		setManufacturerName(manufacturerNameProp);
+	}
+	
+	/**
+	 * 
+	 * gets manufacturerName
+	 * legally valid designation of the natural or judicial person which is directly
+     * responsible for the design, production, packaging and labeling of a product
+     * in respect to its being brought into circulation
+     * Note: mandatory property according to EU Machine Directive
+     * 2006/42/EC.
+	 * @return
+	 */
+	public IMultiLanguageProperty getManufacturerName() {
+		return (IMultiLanguageProperty) getSubmodelElement(MANUFACTURERNAMEID);
+	}
+	
+	/**
+	 * sets Short description of the product (short text)
+	 * Note: mandatory property according to EU Machine Directive
+	 * 2006/42/EC.
+	 * @param manufacturerProductDesignation {@link MultiLanguageProperty}
+	 */
+	public void setManufacturerProductDesignation(MultiLanguageProperty manufacturerProductDesignation) {
+		addSubModelElement(manufacturerProductDesignation);
+	}
+	
+	/**
+	 * sets Short description of the product (short text)
+	 * Note: mandatory property according to EU Machine Directive
+	 * 2006/42/EC.
+	 * @param manufacturerProductDesignation {@link LangString}
+	 */
+	public void setManufacturerProductDesignation(LangString manufacturerProductDesignation) {
+		MultiLanguageProperty manufacturerProductDesignationProp = new MultiLanguageProperty(MANUFACTURERPRODUCTDESIGNATIONID);
+		manufacturerProductDesignationProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAW338#001", IdentifierType.IRDI)));
+		manufacturerProductDesignationProp.setValue(new LangStrings(manufacturerProductDesignation));
+		setManufacturerProductDesignation(manufacturerProductDesignationProp);
+	}
+	
+	/**
+	 * gets Short description of the product (short text)
+	 * Note: mandatory property according to EU Machine Directive
+	 * 2006/42/EC.
+	 * @return
+	 */
+	public IMultiLanguageProperty getManufacturerProductDesignation() {
+		return (IMultiLanguageProperty) getSubmodelElement(MANUFACTURERPRODUCTDESIGNATIONID);
+	}
+	
+	/**
+	 * sets address information of a business partner
+	 * 
+	 * Note: mandatory property according to EU Machine Directive
+	 * 2006/42/EC.
+	 * @param address
+	 */
+	public void setAddress(Address address) {
+		addSubModelElement(address);
+	}
+	
+	/**
+	 * gets address information of a business partner
+	 * 
+	 * Note: mandatory property according to EU Machine Directive
+	 * 2006/42/EC.
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Address getAddress() {
+		ISubmodelElement element = getSubmodelElement(ADDRESSID);
+		return element == null ? null : Address.createAsFacade((Map<String, Object>) element);
+	}
+	
+	/**
+	 * sets 2nd level of a 3 level manufacturer specific product hierarchy
+	 * Note: mandatory property according to EU Machine Directive
+	 * 2006/42/EC.
+	 * @param manufacturerProductFamily {@link MultiLanguageProperty}
+	 */
+	public void setManufacturerProductFamily(MultiLanguageProperty manufacturerProductFamily) {
+		addSubModelElement(manufacturerProductFamily);
+	}
+	
+	/**
+	 * sets 2nd level of a 3 level manufacturer specific product hierarchy
+	 * Note: mandatory property according to EU Machine Directive
+	 * 2006/42/EC.
+	 * @param manufacturerProductFamily {@link LangString}
+	 */
+	public void setManufacturerProductFamily(LangString manufacturerProductFamily) {
+		MultiLanguageProperty manufacturerProductFamilyProp = new MultiLanguageProperty(MANUFACTURERPRODUCTFAMILYID);
+		manufacturerProductFamilyProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAU731#001", IdentifierType.IRDI)));
+		manufacturerProductFamilyProp.setValue(new LangStrings(manufacturerProductFamily));
+		setManufacturerProductFamily(manufacturerProductFamilyProp);
+	}
+	
+	/**
+	 * gets 2nd level of a 3 level manufacturer specific product hierarchy
+	 * Note: mandatory property according to EU Machine Directive
+	 * 2006/42/EC.
+	 * @return
+	 */
+	public IMultiLanguageProperty getManufacturerProductFamily() {
+		return (IMultiLanguageProperty) getSubmodelElement(MANUFACTURERPRODUCTFAMILYID);
+	}
+	
+	/**
+	 * sets unique combination of numbers and letters used to identify the device
+	 * once it has been manufactured
+	 * @param serialNumber
+	 */
+	public void setSerialNumber(Property serialNumber) {
+		addSubModelElement(serialNumber);
+	}
+	
+	/**
+	 * sets unique combination of numbers and letters used to identify the device
+	 * once it has been manufactured
+	 * @param serialNumber
+	 */
+	public void setSerialNumber(String serialNumber) {
+		Property serialNumberProp = new Property(SERIALNUMBERID, PropertyValueTypeDef.String);
+		serialNumberProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAM556#002", IdentifierType.IRDI)));
+		serialNumberProp.set(serialNumber);
+		setSerialNumber(serialNumberProp);
+	}
+	
+	/**
+	 * gets unique combination of numbers and letters used to identify the device
+	 * once it has been manufactured
+	 * @return
+	 */
+	public IProperty getSerialNumber() {
+		return (IProperty) getSubmodelElement(SERIALNUMBERID);
+	}
+	
+	/**
+	 * sets year as completion date of object
+	 * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param yearsOfConstruction
+	 */
+	public void setYearOfConstruction(Property yearsOfConstruction) {
+		addSubModelElement(yearsOfConstruction);
+	}
+	
+	/**
+	 * sets year as completion date of object
+	 * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param yearsOfConstruction
+	 */
+	public void setYearOfConstruction(String yearsOfConstruction) {
+		Property yearsOfConstructionProp = new Property(YEARSOFCONSTRUCTIONID, PropertyValueTypeDef.String);
+		yearsOfConstructionProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAP906#001", IdentifierType.IRDI)));
+		yearsOfConstructionProp.set(yearsOfConstruction);
+		setYearOfConstruction(yearsOfConstructionProp);
+	}
+	
+	/**
+	 * gets year as completion date of object
+	 * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @return
+	 */
+	public IProperty getYearOfConstruction() {
+		return (IProperty) getSubmodelElement(YEARSOFCONSTRUCTIONID);
+	}
+	
+	/**
+	 * sets collection of product markings
+	 * Note: CE marking is declared as mandatory according to EU Machine
+	 * Directive 2006/42/EC.
+	 * @param markings
+	 */
+	public void setMarkings(Markings markings) {
+		addSubModelElement(markings);
+	}
+	
+	/**
+	 * gets collection of product markings
+	 * Note: CE marking is declared as mandatory according to EU Machine
+	 * Directive 2006/42/EC.
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Markings getMarkings() {
+		ISubmodelElement element = getSubmodelElement(MARKINGSID);
+		return element == null ? null : Markings.createAsFacade((Map<String, Object>) element);
+	}
+	
+	/**
+	 * sets Collection of guideline specific properties
+	 * @param assetSpecificProperties
+	 */
+	public void setAssetSpecificProperties(AssetSpecificProperties assetSpecificProperties) {
+		addSubModelElement(assetSpecificProperties);
+	}
+	
+	/**
+	 * gets Collection of guideline specific properties
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public AssetSpecificProperties getAssetSpecificProperties() {
+		ISubmodelElement element = getSubmodelElement(ASSETSPECIFICPROPERTIESID);
+		return element == null ? null : AssetSpecificProperties.createAsFacade((Map<String, Object>) element);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/enums/FaxType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/enums/FaxType.java
new file mode 100644
index 0000000..fe922f4
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/enums/FaxType.java
@@ -0,0 +1,48 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.enums;
+
+import org.eclipse.basyx.submodel.metamodel.enumhelper.StandardizedLiteralEnum;
+import org.eclipse.basyx.submodel.metamodel.enumhelper.StandardizedLiteralEnumHelper;
+
+/**
+ * characterization of the fax according its location or usage
+ * as described in the AAS Digital Nameplate template
+ * @author haque
+ *
+ */
+public enum FaxType implements StandardizedLiteralEnum  {
+	
+	/**
+	 * (office, 0173-1#07-AAS754#001)
+	 */
+	OFFICE("1"),
+	
+	/**
+	 * (secretary, 0173-1#07-AAS756#001)
+	 */
+	SECRETARY("3"),
+	
+	/**
+	 * (home, 0173-1#07-AAS758#001)
+	 */
+	HOME("5");
+
+	private String standardizedLiteral;
+
+	private FaxType(String standardizedLiteral) {
+		this.standardizedLiteral = standardizedLiteral;
+	}
+
+	@Override
+	public String getStandardizedLiteral() {
+		return standardizedLiteral;
+	}
+
+	@Override
+	public String toString() {
+		return standardizedLiteral;
+	}
+
+	public static FaxType fromString(String str) {
+		return StandardizedLiteralEnumHelper.fromLiteral(FaxType.class, str);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/enums/MailType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/enums/MailType.java
new file mode 100644
index 0000000..7735288
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/enums/MailType.java
@@ -0,0 +1,55 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.enums;
+
+import org.eclipse.basyx.submodel.metamodel.enumhelper.StandardizedLiteralEnum;
+import org.eclipse.basyx.submodel.metamodel.enumhelper.StandardizedLiteralEnumHelper;
+
+/**
+ * characterization of an e-mail address according to its location or usage
+ * as described in the AAS Digital Nameplate template
+ * @author haque
+ *
+ */
+public enum MailType implements StandardizedLiteralEnum {
+	// Enum values
+	
+	/**
+	 * (office, 0173-1#07-AAS754#001)
+	 */
+	OFFICE("1"),
+	
+	/**
+	 * (secretary, 0173-1#07-AAS756#001)
+	 */
+	SECRETARY("3"),
+	
+	/**
+	 * (substitute, 0173-1#07-AAS757#001)
+	 */
+	SUBSTITUTE("4"),
+	
+	/**
+	 * (home, 0173-1#07-AAS758#001)
+	 */
+	HOME("5");
+
+	private String standardizedLiteral;
+
+	private MailType(String standardizedLiteral) {
+		this.standardizedLiteral = standardizedLiteral;
+	}
+
+	@Override
+	public String getStandardizedLiteral() {
+		return standardizedLiteral;
+	}
+
+	@Override
+	public String toString() {
+		return standardizedLiteral;
+	}
+
+	public static MailType fromString(String str) {
+		return StandardizedLiteralEnumHelper.fromLiteral(MailType.class, str);
+	}
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/enums/PhoneType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/enums/PhoneType.java
new file mode 100644
index 0000000..bdf5f0d
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/enums/PhoneType.java
@@ -0,0 +1,63 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.enums;
+
+import org.eclipse.basyx.submodel.metamodel.enumhelper.StandardizedLiteralEnum;
+import org.eclipse.basyx.submodel.metamodel.enumhelper.StandardizedLiteralEnumHelper;
+
+/**
+ * characterization of a telephone according to its location or usage
+ * as described in the AAS Digital Nameplate template
+ * @author haque
+ *
+ */
+public enum PhoneType implements StandardizedLiteralEnum {
+	
+	/**
+	 * (office, 0173-1#07-AAS754#001)
+	 */
+	OFFICE("1"),
+	
+	/**
+	 * (office mobile, 0173-1#07-AAS755#001)
+	 */
+	OFFICEMOBILE("2"),
+	
+	/**
+	 * (secretary, 0173-1#07-AAS756#001)
+	 */
+	SECRETARY("3"),
+	
+	/**
+	 * (substitute, 0173-1#07-AAS757#001)
+	 */
+	SUBSTITUTE("4"),
+	
+	/**
+	 * (home, 0173-1#07-AAS758#001)
+	 */
+	HOME("5"),
+	
+	/**
+	 * (private mobile, 0173-1#07-AAS759#001)
+	 */
+	PRIVATEMOBILE("6");;
+
+	private String standardizedLiteral;
+
+	private PhoneType(String standardizedLiteral) {
+		this.standardizedLiteral = standardizedLiteral;
+	}
+
+	@Override
+	public String getStandardizedLiteral() {
+		return standardizedLiteral;
+	}
+
+	@Override
+	public String toString() {
+		return standardizedLiteral;
+	}
+
+	public static PhoneType fromString(String str) {
+		return StandardizedLiteralEnumHelper.fromLiteral(PhoneType.class, str);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/helper/DigitalNameplateSubmodelHelper.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/helper/DigitalNameplateSubmodelHelper.java
new file mode 100644
index 0000000..dc44084
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/helper/DigitalNameplateSubmodelHelper.java
@@ -0,0 +1,18 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.helper;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+
+public class DigitalNameplateSubmodelHelper {
+	
+	public static List<ISubmodelElement> getSubmodelElementsByIdPrefix(String prefix, Map<String, ISubmodelElement> elemMap) {
+		if (elemMap != null && elemMap.size() > 0) {
+			return elemMap.values().stream().filter(s -> s.getIdShort().startsWith(prefix)).collect(Collectors.toList());
+		}
+		return new ArrayList<ISubmodelElement>();
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Address.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Address.java
new file mode 100644
index 0000000..ac71604
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Address.java
@@ -0,0 +1,558 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IMultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.helper.DigitalNameplateSubmodelHelper;
+
+/**
+ * Address as defined in the AAS Digital Nameplate Template document <br/>
+ * It is a submodel element collection which contains
+ * The standardized SMC Address contains information 
+ * about address of a partner within the value chain.
+ * 
+ * @author haque
+ *
+ */
+public class Address extends SubmodelElementCollection {
+	public static final String DEPARTMENTID = "Department";
+	public static final String STREETID = "Street";
+	public static final String ZIPCODEID = "Zipcode";
+	public static final String POBOXID = "POBox";
+	public static final String ZIPCODEOFPOBOXID = "ZipCodeOfPOBox";
+	public static final String CITYTOWNID = "CityTown";
+	public static final String STATECOUNTYID = "StateCounty";
+	public static final String NATIONALCODEID = "NationalCode";
+	public static final String VATNUMBERID = "VATNumber";
+	public static final String ADDRESSREMARKSID = "AddressRemarks";
+	public static final String ADDRESSOFADDITIONALLINKID = "AddressOfAdditionalLink";
+	public static final String PHONEPREFIX = "Phone";
+	public static final String FAXPREFIX = "Fax";
+	public static final String EMAILPREFIX = "Email";
+	public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAQ832#005", KeyType.IRDI));
+	public static final String ADDRESSIDSHORT = "Address";
+	
+	private Address() {
+	}
+	
+	/**
+	 * Constructor with default idShort
+	 * @param street
+	 * @param zipCode
+	 * @param cityTown
+	 * @param nationalCode
+	 */
+	public Address(MultiLanguageProperty street, MultiLanguageProperty zipCode, MultiLanguageProperty cityTown, MultiLanguageProperty nationalCode) {
+		this(ADDRESSIDSHORT, street, zipCode, cityTown, nationalCode);
+	}
+	
+	/**
+	 * Constructor with default idShort
+	 * @param street
+	 * @param zipCode
+	 * @param cityTown
+	 * @param nationalCode
+	 */
+	public Address(LangString street, LangString zipCode, LangString cityTown, LangString nationalCode) {
+		this(ADDRESSIDSHORT, street, zipCode, cityTown, nationalCode);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param street
+	 * @param zipCode
+	 * @param cityTown
+	 * @param nationalCode
+	 */
+	public Address(String idShort, MultiLanguageProperty street, MultiLanguageProperty zipCode, MultiLanguageProperty cityTown, MultiLanguageProperty nationalCode) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setStreet(street);
+		setZipCode(zipCode);
+		setCityTown(cityTown);
+		setNationalCode(nationalCode);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param street
+	 * @param zipCode
+	 * @param cityTown
+	 * @param nationalCode
+	 */
+	public Address(String idShort, LangString street, LangString zipCode, LangString cityTown, LangString nationalCode) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setStreet(street);
+		setZipCode(zipCode);
+		setCityTown(cityTown);
+		setNationalCode(nationalCode);
+	}
+	
+	/**
+	 * Creates a Address SMC object from a map
+	 * 
+	 * @param obj a Address SMC object as raw map
+	 * @return a Address SMC object, that behaves like a facade for the given map
+	 */
+	public static Address createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(Address.class, obj);
+		}
+
+		Address address = new Address();
+		address.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return address;
+	}
+	
+	/**
+	 * Creates a Address SMC object from a map without validation
+	 * 
+	 * @param obj a Address SMC object as raw map
+	 * @return a Address SMC object, that behaves like a facade for the given map
+	 */
+	private static Address createAsFacadeNonStrict(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+
+		Address address = new Address();
+		address.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return address;
+	}
+	
+	/**
+	 * Check whether all mandatory elements for Address SMC
+	 * exist in the map
+	 * 
+	 * @param obj
+	 * 
+	 * @return true/false
+	 */
+	@SuppressWarnings("unchecked")
+	public static boolean isValid(Map<String, Object> obj) {
+		Address address = createAsFacadeNonStrict(obj);
+		
+		return SubmodelElementCollection.isValid(obj)
+				&& MultiLanguageProperty.isValid((Map<String, Object>) address.getStreet())
+				&& MultiLanguageProperty.isValid((Map<String, Object>) address.getZipCode())
+				&& MultiLanguageProperty.isValid((Map<String, Object>) address.getCityTown())
+				&& MultiLanguageProperty.isValid((Map<String, Object>) address.getNationalCode());
+	}
+
+	/**
+	 * Gets administrative section within an organisation where a business partner is located
+	 * @return
+	 */
+	public IMultiLanguageProperty getDepartment() {
+		return (IMultiLanguageProperty) getSubmodelElement(DEPARTMENTID);
+	}
+
+	/**
+	 * Sets administrative section within an organisation where a business partner is located
+	 * @param department {@link MultiLanguageProperty}
+	 */
+	public void setDepartment(MultiLanguageProperty department) {
+		addSubModelElement(department);
+	}
+	
+	/**
+	 * Sets administrative section within an organisation where a business partner is located
+	 * @param department {@link LangString}
+	 */
+	public void setDepartment(LangString department) {
+		MultiLanguageProperty deptProp = new MultiLanguageProperty(DEPARTMENTID);
+		deptProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO127#003", IdentifierType.IRDI)));
+		deptProp.setValue(new LangStrings(department));
+		setDepartment(deptProp);
+	}
+
+	/**
+	 * Gets street name and house number
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @return
+	 */
+	public IMultiLanguageProperty getStreet() {
+		return (IMultiLanguageProperty) getSubmodelElement(STREETID);
+	}
+
+	/**
+	 * Sets street name and house number
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param street {@link MultiLanguageProperty}
+	 */
+	public void setStreet(MultiLanguageProperty street) {
+		addSubModelElement(street);
+	}
+	
+	/**
+	 * Sets street name and house number
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param street {@link LangString}
+	 */
+	public void setStreet(LangString street) {
+		MultiLanguageProperty streetProp = new MultiLanguageProperty(STREETID);
+		streetProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO128#002", IdentifierType.IRDI)));
+		streetProp.setValue(new LangStrings(street));
+		setStreet(streetProp);
+	}
+
+	/**
+	 * Gets ZIP code of address
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @return
+	 */
+	public IMultiLanguageProperty getZipCode() {
+		return (IMultiLanguageProperty) getSubmodelElement(ZIPCODEID);
+	}
+
+	/**
+	 * Sets ZIP code of address
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param zipCode {@link MultiLanguageProperty}
+	 */
+	public void setZipCode(MultiLanguageProperty zipCode) {
+		addSubModelElement(zipCode);
+	}
+	
+	/**
+	 * Sets ZIP code of address
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param zipCode {@link LangString}
+	 */
+	public void setZipCode(LangString zipCode) {
+		MultiLanguageProperty zipCodeProp = new MultiLanguageProperty(ZIPCODEID);
+		zipCodeProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO129#002", IdentifierType.IRDI)));
+		zipCodeProp.setValue(new LangStrings(zipCode));
+		setZipCode(zipCodeProp);
+	}
+
+	/**
+	 * Gets P.O. box number
+	 * @return
+	 */
+	public IMultiLanguageProperty getPOBox() {
+		return (IMultiLanguageProperty) getSubmodelElement(POBOXID);
+	}
+
+	/**
+	 * Sets P.O. box number
+	 * @param poBox {@link MultiLanguageProperty}
+	 */
+	public void setPOBox(MultiLanguageProperty poBox) {
+		addSubModelElement(poBox);
+	}
+	
+	/**
+	 * Sets P.O. box number
+	 * @param poBox {@link LangString}
+	 */
+	public void setPOBox(LangString poBox) {
+		MultiLanguageProperty poBoxProp = new MultiLanguageProperty(POBOXID);
+		poBoxProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO130#002", IdentifierType.IRDI)));
+		poBoxProp.setValue(new LangStrings(poBox));
+		setPOBox(poBoxProp);
+	}
+
+	/**
+	 * Gets ZIP code of P.O. box address
+	 * @return
+	 */
+	public IMultiLanguageProperty getZipCodeOfPOBox() {
+		return (IMultiLanguageProperty) getSubmodelElement(ZIPCODEOFPOBOXID);
+	}
+
+	/**
+	 * Sets ZIP code of P.O. box address
+	 * @param zipCodeOfPoBox {@link MultiLanguageProperty}
+	 */
+	public void setZipCodeOfPOBox(MultiLanguageProperty zipCodeOfPoBox) {
+		addSubModelElement(zipCodeOfPoBox);
+	}
+	
+	/**
+	 * Sets ZIP code of P.O. box address
+	 * @param zipCodeOfPoBox {@link LangString}
+	 */
+	public void setZipCodeOfPOBox(LangString zipCodeOfPoBox) {
+		MultiLanguageProperty zipCodeOfPoBoxProp = new MultiLanguageProperty(ZIPCODEOFPOBOXID);
+		zipCodeOfPoBoxProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO131#002", IdentifierType.IRDI)));
+		zipCodeOfPoBoxProp.setValue(new LangStrings(zipCodeOfPoBox));
+		setZipCodeOfPOBox(zipCodeOfPoBoxProp);
+	}
+
+	/**
+	 * Gets town or city
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @return
+	 */
+	public IMultiLanguageProperty getCityTown() {
+		return (IMultiLanguageProperty) getSubmodelElement(CITYTOWNID);
+	}
+	
+	/**
+	 * Sets town or city
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param cityTown {@link MultiLanguageProperty}
+	 */
+	public void setCityTown(MultiLanguageProperty cityTown) {
+		addSubModelElement(cityTown);
+	}
+	
+	/**
+	 * Sets town or city
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param cityTown {@link LangString}
+	 */
+	public void setCityTown(LangString cityTown) {
+		MultiLanguageProperty cityTownProp = new MultiLanguageProperty(CITYTOWNID);
+		cityTownProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO132#002", IdentifierType.IRDI)));
+		cityTownProp.setValue(new LangStrings(cityTown));
+		setCityTown(cityTownProp);
+	}
+
+	/**
+	 * Gets federal state a part of a state
+	 * @return
+	 */
+	public IMultiLanguageProperty getStateCounty() {
+		return (IMultiLanguageProperty) getSubmodelElement(STATECOUNTYID);
+	}
+
+	/**
+	 * Sets federal state a part of a state
+	 * @param stateCounty {@link MultiLanguageProperty}
+	 */
+	public void setStateCounty(MultiLanguageProperty stateCounty) {
+		addSubModelElement(stateCounty);
+	}
+
+	/**
+	 * Sets federal state a part of a state
+	 * @param stateCounty {@link LangString}
+	 */
+	public void setStateCounty(LangString stateCounty) {
+		MultiLanguageProperty stateCountyProp = new MultiLanguageProperty(STATECOUNTYID);
+		stateCountyProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO133#002", IdentifierType.IRDI)));
+		stateCountyProp.setValue(new LangStrings(stateCounty));
+		setStateCounty(stateCountyProp);
+	}
+	
+	/**
+	 * Gets code of a country
+     * Note: Country codes defined accord. to DIN EN ISO 3166-1
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @return
+	 */
+	public IMultiLanguageProperty getNationalCode() {
+		return (IMultiLanguageProperty) getSubmodelElement(NATIONALCODEID);
+	}
+
+	/**
+	 * Sets code of a country
+     * Note: Country codes defined accord. to DIN EN ISO 3166-1
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param nationalCode {@link MultiLanguageProperty}
+	 */
+	public void setNationalCode(MultiLanguageProperty nationalCode) {
+		addSubModelElement(nationalCode);
+	}
+	
+	/**
+	 * Sets code of a country
+     * Note: Country codes defined accord. to DIN EN ISO 3166-1
+     * Note: mandatory property according to EU Machine Directive 2006/42/EC.
+	 * @param nationalCode {@link LangString}
+	 */
+	public void setNationalCode(LangString nationalCode) {
+		MultiLanguageProperty nationalCodeProp = new MultiLanguageProperty(NATIONALCODEID);
+		nationalCodeProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO134#002", IdentifierType.IRDI)));
+		nationalCodeProp.setValue(new LangStrings(nationalCode));
+		setNationalCode(nationalCodeProp);
+	}
+
+	/**
+	 * Gets VAT identification number of the business partner
+	 * @return
+	 */
+	public IMultiLanguageProperty getVatNumber() {
+		return (IMultiLanguageProperty) getSubmodelElement(VATNUMBERID);
+	}
+
+	/**
+	 * Sets VAT identification number of the business partner
+	 * @param vatNumber {@link MultiLanguageProperty}
+	 */
+	public void setVatNumber(MultiLanguageProperty vatNumber) {
+		addSubModelElement(vatNumber);
+	}
+	
+	/**
+	 * Sets VAT identification number of the business partner
+	 * @param vatNumber {@link LangString}
+	 */
+	public void setVatNumber(LangString vatNumber) {
+		MultiLanguageProperty vatNumberProp = new MultiLanguageProperty(VATNUMBERID);
+		vatNumberProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO135#002", IdentifierType.IRDI)));
+		vatNumberProp.setValue(new LangStrings(vatNumber));
+		setVatNumber(vatNumberProp);
+	}
+
+	/**
+	 * Gets plain text characterizing address information for which there is no property
+	 * @return
+	 */
+	public IMultiLanguageProperty getAddressRemarks() {
+		return (IMultiLanguageProperty) getSubmodelElement(ADDRESSREMARKSID);
+	}
+
+	/**
+	 * Sets plain text characterizing address information for which there is no property
+	 * @param addressRemarks {@link MultiLanguageProperty}
+	 */
+	public void setAddressRemarks(MultiLanguageProperty addressRemarks) {
+		addSubModelElement(addressRemarks);
+	}
+	
+	/**
+	 * Sets plain text characterizing address information for which there is no property
+	 * @param addressRemarks {@link LangString}
+	 */
+	public void setAddressRemarks(LangString addressRemarks) {
+		MultiLanguageProperty addressRemarksProp = new MultiLanguageProperty(ADDRESSREMARKSID);
+		addressRemarksProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO202#003", IdentifierType.IRDI)));
+		addressRemarksProp.setValue(new LangStrings(addressRemarks));
+		setAddressRemarks(addressRemarksProp);
+	}
+
+	/**
+	 * Gets web site address where information about the product or contact is given
+	 * @return
+	 */
+	public IProperty getAddressOfAdditionalLink() {
+		return (IProperty) getSubmodelElement(ADDRESSOFADDITIONALLINKID);
+	}
+
+	/**
+	 * Sets web site address where information about the product or contact is given
+	 * @param addressOfAdditionalLink {@link Property}
+	 */
+	public void setAddressOfAdditionalLink(Property addressOfAdditionalLink) {
+		addSubModelElement(addressOfAdditionalLink);
+	}
+	
+	/**
+	 * Sets web site address where information about the product or contact is given
+	 * @param addressOfAdditionalLink {@link String}
+	 */
+	public void setAddressOfAdditionalLink(String addressOfAdditionalLink) {
+		Property addressOfAdditionalLinkProp = new Property(ADDRESSOFADDITIONALLINKID, PropertyValueTypeDef.String);
+		addressOfAdditionalLinkProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAQ326#002", IdentifierType.IRDI)));
+		addressOfAdditionalLinkProp.set(addressOfAdditionalLink);
+		setAddressOfAdditionalLink(addressOfAdditionalLinkProp);
+	}
+
+	/**
+	 * Gets Phone number including type
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<Phone> getPhone() {
+		List<Phone> ret = new ArrayList<Phone>();
+		List<ISubmodelElement> elements = DigitalNameplateSubmodelHelper.getSubmodelElementsByIdPrefix(PHONEPREFIX, getSubmodelElements());
+		
+		for (ISubmodelElement element: elements) {
+			ret.add(Phone.createAsFacade((Map<String, Object>) element));
+		}
+		return ret;
+	}
+
+	/**
+	 * Sets Phone number including type
+	 * @param phone
+	 */
+	public void setPhone(List<Phone> phones) {
+		if (phones != null && phones.size() > 0) {
+			for (Phone phone : phones) {
+				addSubModelElement(phone);
+			}
+		}
+	}
+
+	/**
+	 * Gets fax number including type
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<Fax> getFax() {
+		List<Fax> ret = new ArrayList<Fax>();
+		List<ISubmodelElement> elements = DigitalNameplateSubmodelHelper.getSubmodelElementsByIdPrefix(FAXPREFIX, getSubmodelElements());
+		
+		for (ISubmodelElement element: elements) {
+			ret.add(Fax.createAsFacade((Map<String, Object>) element));
+		}
+		return ret;
+	}
+
+	/**
+	 * Sets fax number including type
+	 * @param fax
+	 */
+	public void setFax(List<Fax> faxes) {
+		if (faxes != null && faxes.size() > 0) {
+			for (Fax fax : faxes) {
+				addSubModelElement(fax);
+			}
+		}
+	}
+
+	/**
+	 * Gets E-mail address and encryption method
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<Email> getEmail() {
+		List<Email> ret = new ArrayList<Email>();
+		List<ISubmodelElement> elements = DigitalNameplateSubmodelHelper.getSubmodelElementsByIdPrefix(EMAILPREFIX, getSubmodelElements());
+		
+		for (ISubmodelElement element: elements) {
+			ret.add(Email.createAsFacade((Map<String, Object>) element));
+		}
+		return ret;
+	}
+
+	/**
+	 * Sets E-mail address and encryption method
+	 * @param email
+	 */
+	public void setEmail(List<Email> emails) {
+		if (emails != null && emails.size() > 0) {
+			for (Email email : emails) {
+				addSubModelElement(email);
+			}
+		}
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Email.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Email.java
new file mode 100644
index 0000000..dba6565
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Email.java
@@ -0,0 +1,223 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address;
+
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IMultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.enums.MailType;
+
+/**
+ * Email as defined in the AAS Digital Nameplate Template document <br/>
+ * It is a submodel element collection which contains email address and encryption method
+ * 
+ * @author haque
+ *
+ */
+public class Email extends SubmodelElementCollection {
+	public static final String EMAILADDRESSID = "EmailAddress";
+	public static final String PUBLICKEYID = "PublicKey";
+	public static final String TYPEOFEMAILADDRESSID = "TypeOfEmailAddress";
+	public static final String TYPEOFPUBLICKEYID = "TypeOfPublickKey";
+	public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAQ836#005", KeyType.IRDI));
+	
+	private Email() {
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param emailAddress
+	 */
+	public Email(String idShort, Property emailAddress) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setEmailAddress(emailAddress);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param emailAddress
+	 */
+	public Email(String idShort, String emailAddress) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setEmailAddress(emailAddress);
+	}
+	
+	/**
+	 * Creates a Email SMC object from a map
+	 * 
+	 * @param obj a Email SMC object as raw map
+	 * @return a Email SMC object, that behaves like a facade for the given map
+	 */
+	public static Email createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(Email.class, obj);
+		}
+		
+		Email email = new Email();
+		email.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return email;
+	}
+	
+	/**
+	 * Creates a Email SMC object from a map without validation
+	 * 
+	 * @param obj a Email SMC object as raw map
+	 * @return a Email SMC object, that behaves like a facade for the given map
+	 */
+	private static Email createAsFacadeNonStrict(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		Email email = new Email();
+		email.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return email;
+	}
+	
+	/**
+	 * Check whether all mandatory elements for Email SMC
+	 * exist in the map
+	 * 
+	 * @param obj
+	 * 
+	 * @return true/false
+	 */
+	@SuppressWarnings("unchecked")
+	public static boolean isValid(Map<String, Object> obj) {
+		Email email = createAsFacadeNonStrict(obj);
+		
+		return SubmodelElementCollection.isValid(obj)
+				&& Property.isValid((Map<String, Object>) email.getEmailAddress());
+	}
+	
+	/**
+	 * sets electronic mail address of a business partner
+	 * @param emailAddress Property
+	 */
+	public void setEmailAddress(Property emailAddress) {
+		addSubModelElement(emailAddress);
+	}
+	
+	/**
+	 * sets electronic mail address of a business partner
+	 * @param emailAddress String
+	 */
+	public void setEmailAddress(String emailAddress) {
+		Property emailProp = new Property(EMAILADDRESSID, PropertyValueTypeDef.String);
+		emailProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO198#002", IdentifierType.IRDI)));
+		emailProp.set(emailAddress);
+		setEmailAddress(emailProp);
+	}
+	
+	/**
+	 * gets electronic mail address of a business partner
+	 * @return
+	 */
+	public IProperty getEmailAddress() {
+		return (IProperty) getSubmodelElement(EMAILADDRESSID);
+	}
+	
+	/**
+	 * sets public part of an unsymmetrical key pair to sign or encrypt text or messages
+	 * @param key {@link MultiLanguageProperty}
+	 */
+	public void setPublicKey(MultiLanguageProperty key) {
+		addSubModelElement(key);
+	}
+	
+	/**
+	 * sets public part of an unsymmetrical key pair to sign or encrypt text or messages
+	 * @param key {@link LangString}
+	 */
+	public void setPublicKey(LangString key) {
+		MultiLanguageProperty publicKey = new MultiLanguageProperty(PUBLICKEYID);
+		publicKey.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO200#002", IdentifierType.IRDI)));
+		publicKey.setValue(new LangStrings(key));
+		setPublicKey(publicKey);
+	}
+	
+	/**
+	 * gets public part of an unsymmetrical key pair to sign or encrypt text or messages
+	 * @return
+	 */
+	public IMultiLanguageProperty getPublicKey() {
+		return (IMultiLanguageProperty) getSubmodelElement(PUBLICKEYID);
+	}
+	
+	/**
+	 * sets characterization of an e-mail address according to its location or usage
+	 * enumeration
+	 * @param type {@link Property}
+	 */
+	public void setTypeOfEmailAddress(Property type) {
+		addSubModelElement(type);
+	}
+	
+	/**
+	 * sets characterization of an e-mail address according to its location or usage
+	 * enumeration
+	 * @param type {@link MailType}
+	 */
+	public void setTypeOfEmailAddress(MailType type) {
+		Property mailTypeProp = new Property(TYPEOFEMAILADDRESSID, PropertyValueTypeDef.String);
+		mailTypeProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO199#003", IdentifierType.IRDI)));
+		mailTypeProp.set(type.toString());
+		setTypeOfEmailAddress(mailTypeProp);
+	}
+	
+	/**
+	 * gets characterization of an e-mail address according to its location or usage
+	 * enumeration
+	 * @return
+	 */
+	public IProperty getTypeOfEmailAddress() {
+		return (IProperty) getSubmodelElement(TYPEOFEMAILADDRESSID);
+	}
+	
+	/**
+	 * sets characterization of a public key according to its encryption process
+	 * @param key {@link MultiLanguageProperty}
+	 */
+	public void setTypeOfPublicKey(MultiLanguageProperty key) {
+		addSubModelElement(key);
+	}
+	
+	/**
+	 * sets characterization of a public key according to its encryption process
+	 * @param key {@link LangString}
+	 */
+	public void setTypeOfPublicKey(LangString key) {
+		MultiLanguageProperty typeOfPublicKey = new MultiLanguageProperty(TYPEOFPUBLICKEYID);
+		typeOfPublicKey.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO201#002", IdentifierType.IRDI)));
+		typeOfPublicKey.setValue(new LangStrings(key));
+		setTypeOfPublicKey(typeOfPublicKey);
+	}
+	
+	/**
+	 * gets characterization of a public key according to its encryption process
+	 * @return
+	 */
+	public IMultiLanguageProperty getTypeOfPublicKey() {
+		return (IMultiLanguageProperty) getSubmodelElement(TYPEOFPUBLICKEYID);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Fax.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Fax.java
new file mode 100644
index 0000000..9da20bd
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Fax.java
@@ -0,0 +1,166 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address;
+
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IMultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.enums.FaxType;
+
+/**
+ * Fax as defined in the AAS Digital Nameplate Template document <br/>
+ * It is a submodel element collection which contains a fax number including type
+ * 
+ * @author haque
+ *
+ */
+public class Fax extends SubmodelElementCollection {
+	public static final String FAXNUMBERID = "FaxNumber";
+	public static final String TYPEOFFAXID = "TypeOfFaxNumber";
+	public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAQ834#005", KeyType.IRDI));
+	
+	private Fax() {
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param faxNumber
+	 */
+	public Fax(String idShort, LangString faxNumber) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setFaxNumber(faxNumber);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param faxNumber
+	 */
+	public Fax(String idShort, MultiLanguageProperty faxNumber) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setFaxNumber(faxNumber);
+	}
+	
+	/**
+	 * Creates a Fax SMC object from a map
+	 * 
+	 * @param obj a Fax SMC object as raw map
+	 * @return a Fax SMC object, that behaves like a facade for the given map
+	 */
+	public static Fax createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(Fax.class, obj);
+		}
+		
+		Fax fax = new Fax();
+		fax.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return fax;
+	}
+	
+	/**
+	 * Creates a Fax SMC object from a map without validation
+	 * 
+	 * @param obj a Fax SMC object as raw map
+	 * @return a Fax SMC object, that behaves like a facade for the given map
+	 */
+	private static Fax createAsFacadeNonStrict(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		Fax fax = new Fax();
+		fax.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return fax;
+	}
+	
+	/**
+	 * Check whether all mandatory elements for Fax SMC
+	 * exist in the map
+	 * 
+	 * @param obj
+	 * 
+	 * @return true/false
+	 */
+	@SuppressWarnings("unchecked")
+	public static boolean isValid(Map<String, Object> obj) {
+		Fax fax = createAsFacadeNonStrict(obj);
+		return SubmodelElementCollection.isValid(obj)
+				&& MultiLanguageProperty.isValid((Map<String, Object>) fax.getFaxNumber());
+	}
+	
+	/**
+	 * Sets complete telephone number to be called to reach a 
+	 * business partner's fax machine
+	 * @param faxNumber {@link MultiLanguageProperty}
+	 */
+	public void setFaxNumber(MultiLanguageProperty faxNumber) {
+		addSubModelElement(faxNumber);
+	}
+	
+	/**
+	 * Sets complete telephone number to be called to reach a 
+	 * business partner's fax machine
+	 * @param faxNumber {@link LangString}
+	 */
+	public void setFaxNumber(LangString faxNumber) {
+		MultiLanguageProperty faxProp = new MultiLanguageProperty(FAXNUMBERID);
+		faxProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO195#002", IdentifierType.IRDI)));
+		faxProp.setValue(new LangStrings(faxNumber));
+		setFaxNumber(faxProp);
+	}
+	
+	/**
+	 * Sets characterization of the fax according its location or usage
+	 * @param type {@link Property}
+	 */
+	public void setTypeOfFaxNumber(Property type) {
+		addSubModelElement(type);
+	}
+	
+	/**
+	 * Sets characterization of the fax according its location or usage
+	 * @param type {@link FaxType}
+	 */
+	public void setTypeOfFaxNumber(FaxType type) {
+		Property faxTypeProp = new Property(TYPEOFFAXID, PropertyValueTypeDef.String);
+		faxTypeProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO196#003", IdentifierType.IRDI)));
+		faxTypeProp.set(type.toString());
+		setTypeOfFaxNumber(faxTypeProp);
+	}
+	
+	/**
+	 * Gets characterization of the fax according its location or usage
+	 * @return
+	 */
+	public IProperty getTypeOfFaxNumber() {
+		return (IProperty) getSubmodelElement(TYPEOFFAXID);
+	}
+	
+	/**
+	 * Gets complete telephone number to be called to reach a 
+	 * business partner's fax machine
+	 * @return
+	 */
+	public IMultiLanguageProperty getFaxNumber() {
+		return (IMultiLanguageProperty) getSubmodelElement(FAXNUMBERID);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Phone.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Phone.java
new file mode 100644
index 0000000..31a3283
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Phone.java
@@ -0,0 +1,164 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address;
+
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IMultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.enums.PhoneType;
+
+/**
+ * Phone as defined in the AAS Digital Nameplate Template document <br/>
+ * It is a submodel element collection which contains a phone number including type
+ * 
+ * @author haque
+ *
+ */
+public class Phone extends SubmodelElementCollection {
+	public static final String TELEPHONENUMBERID = "TelephoneNumber";
+	public static final String TYPEOFTELEPHONEID = "TypeOfTelephone";
+	public static final String PHONEID = "Phone";
+	public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAQ833#005", KeyType.IRDI));
+	
+	private Phone() {}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param telephoneNumber
+	 */
+	public Phone(String idShort, LangString telephoneNumber) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setTelephoneNumber(telephoneNumber);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * @param idShort
+	 * @param telephoneNumber
+	 */
+	public Phone(String idShort, MultiLanguageProperty telephoneNumber) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setTelephoneNumber(telephoneNumber);
+	}
+	
+	/**
+	 * Creates a Phone SMC object from a map
+	 * 
+	 * @param obj a Phone SMC object as raw map
+	 * @return a Phone SMC object, that behaves like a facade for the given map
+	 */
+	public static Phone createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(Phone.class, obj);
+		}
+		
+		Phone phone = new Phone();
+		phone.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return phone;
+	}
+	
+	/**
+	 * Creates a Phone SMC object from a map without checking validity
+	 * 
+	 * @param obj a Phone SMC object as raw map
+	 * @return a Phone SMC object, that behaves like a facade for the given map
+	 */
+	private static Phone createAsFacadeNonStrict(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		Phone phone = new Phone();
+		phone.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return phone;
+	}
+	
+	/**
+	 * Check whether all mandatory elements for Phone SMC
+	 * exist in the map
+	 * 
+	 * @param obj
+	 * 
+	 * @return true/false
+	 */
+	@SuppressWarnings("unchecked")
+	public static boolean isValid(Map<String, Object> obj) {
+		Phone phone = createAsFacadeNonStrict(obj);
+		
+		return SubmodelElementCollection.isValid(obj)
+				&& MultiLanguageProperty.isValid((Map<String, Object>) phone.getTelephoneNumber());
+	}
+	
+	/**
+	 * Sets complete telephone number to be called to reach a business partner
+	 * @param telephoneNumber {@link MultiLanguageProperty}
+	 */
+	public void setTelephoneNumber(MultiLanguageProperty telephoneNumber) {
+		addSubModelElement(telephoneNumber);
+	}
+	
+	/**
+	 * Sets complete telephone number to be called to reach a business partner
+	 * @param telephoneNumber {@link LangString}
+	 */
+	public void setTelephoneNumber(LangString telephoneNumber) {
+		MultiLanguageProperty phoneProp = new MultiLanguageProperty(TELEPHONENUMBERID);
+		phoneProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO136#002", IdentifierType.IRDI)));
+		phoneProp.setValue(new LangStrings(telephoneNumber));
+		setTelephoneNumber(phoneProp);
+	}
+	
+	/**
+	 * Sets characterization of a telephone according to its location or usage enumeration
+	 * @param type {@link Property}
+	 */
+	public void setTypeOfTelephone(Property type) {
+		addSubModelElement(type);
+	}
+	
+	/**
+	 * Sets characterization of a telephone according to its location or usage enumeration
+	 * @param type {@link PhoneType}
+	 */
+	public void setTypeOfTelephone(PhoneType type) {
+		Property phoneTypeProp = new Property(TYPEOFTELEPHONEID, PropertyValueTypeDef.String);
+		phoneTypeProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO137#003", IdentifierType.IRDI)));
+		phoneTypeProp.set(type.toString());
+		setTypeOfTelephone(phoneTypeProp);
+	}
+	
+	/**
+	 * Gets characterization of a telephone according to its location or usage enumeration
+	 * @return
+	 */
+	public IProperty getTypeOfTelephone() {
+		return (IProperty) getSubmodelElement(TYPEOFTELEPHONEID);
+	}
+	
+	/**
+	 * Gets complete telephone number to be called to reach a business partner
+	 * @return
+	 */
+	public IMultiLanguageProperty getTelephoneNumber() {
+		return (IMultiLanguageProperty) getSubmodelElement(TELEPHONENUMBERID);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/AssetSpecificProperties.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/AssetSpecificProperties.java
new file mode 100644
index 0000000..8f02382
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/AssetSpecificProperties.java
@@ -0,0 +1,131 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.types.digitalnameplate.helper.DigitalNameplateSubmodelHelper;
+
+/**
+ * AssetSpecificProperties as defined in the AAS Digital Nameplate Template document <br/>
+ * It is a submodel element collection which contains collection of guideline specific properties
+ * 
+ * @author haque
+ *
+ */
+public class AssetSpecificProperties extends SubmodelElementCollection {
+	public static final String ASSETSPECIFICPROPERTIESID = "AssetSpecificProperties";
+	public static final String GUIDELINESPECIFICPROPERTYPREFIX = "GuidelineSpecificProperties";
+	public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "https://admin-shell.io/zvei/nameplate/1/0/Nameplate/AssetSpecificProperties", KeyType.IRI));
+	
+	private AssetSpecificProperties() {
+	}
+	
+	/**
+	 * Constructor with default idShort
+	 * @param guidelineSpecificProperties
+	 */
+	public AssetSpecificProperties(List<GuidelineSpecificProperties> guidelineSpecificProperties) {
+		this (ASSETSPECIFICPROPERTIESID, guidelineSpecificProperties);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * 
+	 * @param idShort
+	 * @param guidelineSpecificProperties
+	 */
+	public AssetSpecificProperties(String idShort, List<GuidelineSpecificProperties> guidelineSpecificProperties) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setGuidelineSpecificProperties(guidelineSpecificProperties);
+	}
+	
+	/**
+	 * Creates a AssetSpecificProperties SMC object from a map
+	 * 
+	 * @param obj a AssetSpecificProperties SMC object as raw map
+	 * @return a AssetSpecificProperties SMC object, that behaves like a facade for the given map
+	 */
+	public static AssetSpecificProperties createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(AssetSpecificProperties.class, obj);
+		}
+		
+		AssetSpecificProperties assetSpecificProperties = new AssetSpecificProperties();
+		assetSpecificProperties.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return assetSpecificProperties;
+	}
+	
+	/**
+	 * Creates a AssetSpecificProperties SMC object from a map without validation
+	 * 
+	 * @param obj a AssetSpecificProperties SMC object as raw map
+	 * @return a AssetSpecificProperties SMC object, that behaves like a facade for the given map
+	 */
+	private static AssetSpecificProperties createAsFacadeNonStrict(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		AssetSpecificProperties assetSpecificProperties = new AssetSpecificProperties();
+		assetSpecificProperties.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return assetSpecificProperties;
+	}
+	
+	/**
+	 * Check whether all mandatory elements for AssetSpecificProperties SMC
+	 * exist in the map
+	 * 
+	 * @param obj
+	 * 
+	 * @return true/false
+	 */
+	public static boolean isValid(Map<String, Object> obj) {
+		AssetSpecificProperties props = createAsFacadeNonStrict(obj);
+		
+		if (SubmodelElementCollection.isValid(obj)
+				&& props.getGuidelineSpecificProperties() != null
+				&& props.getGuidelineSpecificProperties().size() > 0) {
+			for (GuidelineSpecificProperties prop : props.getGuidelineSpecificProperties()) {
+				if (!GuidelineSpecificProperties.isValid((Map<String, Object>) prop)) {
+					return false;
+				}
+			}
+			return true;
+		} else {
+			return false;	
+		}
+	}
+	
+	public void setGuidelineSpecificProperties(List<GuidelineSpecificProperties> properties) {
+		if (properties != null & properties.size() > 0) {
+			for (GuidelineSpecificProperties prop : properties) {
+				addSubModelElement(prop);
+			}
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<GuidelineSpecificProperties> getGuidelineSpecificProperties() {
+		List<GuidelineSpecificProperties> ret = new ArrayList<GuidelineSpecificProperties>();
+		List<ISubmodelElement> elements = DigitalNameplateSubmodelHelper.getSubmodelElementsByIdPrefix(GUIDELINESPECIFICPROPERTYPREFIX, getSubmodelElements());
+		
+		for (ISubmodelElement element: elements) {
+			ret.add(GuidelineSpecificProperties.createAsFacade((Map<String, Object>) element));
+		}
+		return ret;
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/GuidelineSpecificProperties.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/GuidelineSpecificProperties.java
new file mode 100644
index 0000000..90a4882
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/GuidelineSpecificProperties.java
@@ -0,0 +1,185 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+
+/**
+ * GuidelineSpecificProperties as defined in the AAS Digital Nameplate Template document <br/>
+ * It is a submodel element collection which contains Asset specific nameplate 
+ * information required by guideline, stipulation or legislation.
+ * 
+ * @author haque
+ *
+ */
+public class GuidelineSpecificProperties extends SubmodelElementCollection {
+	public static final String GUIDELINEFORCONFORMITYDECLARATIONID = "GuidelineForConformityDeclaration";
+	public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "https://adminshell.io/zvei/nameplate/1/0/Nameplate/AssetSpecificProperties/GuidelineSpecificProperties", KeyType.IRI));
+	
+	private GuidelineSpecificProperties() {
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * 
+	 * @param idShort
+	 * @param declaration
+	 * @param arbitrary
+	 */
+	public GuidelineSpecificProperties(String idShort, Property declaration, List<Property> arbitrary) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setGuidelineForConformityDeclaration(declaration);
+		setArbitrary(arbitrary);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * 
+	 * @param idShort
+	 * @param declaration
+	 * @param arbitrary
+	 */
+	public GuidelineSpecificProperties(String idShort, String declaration, List<Property> arbitrary) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setGuidelineForConformityDeclaration(declaration);
+		setArbitrary(arbitrary);
+	}
+	
+	/**
+	 * Creates a GuidelineSpecificProperties SMC object from a map
+	 * 
+	 * @param obj a GuidelineSpecificProperties SMC object as raw map
+	 * @return a GuidelineSpecificProperties SMC object, that behaves like a facade for the given map
+	 */
+	public static GuidelineSpecificProperties createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(GuidelineSpecificProperties.class, obj);
+		}
+		
+		GuidelineSpecificProperties guidelineSpecificProperties = new GuidelineSpecificProperties();
+		guidelineSpecificProperties.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return guidelineSpecificProperties;
+	}
+	
+	/**
+	 * Creates a GuidelineSpecificProperties SMC object from a map without validation
+	 * 
+	 * @param obj a GuidelineSpecificProperties SMC object as raw map
+	 * @return a GuidelineSpecificProperties SMC object, that behaves like a facade for the given map
+	 */
+	private static GuidelineSpecificProperties createAsFacadeNonStrict(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		GuidelineSpecificProperties guidelineSpecificProperties = new GuidelineSpecificProperties();
+		guidelineSpecificProperties.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return guidelineSpecificProperties;
+	}
+	
+	/**
+	 * Check whether all mandatory elements for GuidelineSpecificProperties SMC
+	 * exist in the map
+	 * 
+	 * @param obj
+	 * 
+	 * @return true/false
+	 */
+	@SuppressWarnings("unchecked")
+	public static boolean isValid(Map<String, Object> obj) {
+		GuidelineSpecificProperties props = createAsFacadeNonStrict(obj);
+		
+		if (SubmodelElementCollection.isValid(obj)
+				&& Property.isValid((Map<String, Object>) props.getGuidelineForConformityDeclaration())
+				&& props.getArbitrary() != null
+				&& props.getArbitrary().size() > 0) {
+			for (IProperty arbitrary: props.getArbitrary()) {
+				if (!Property.isValid((Map<String, Object>) arbitrary)) {
+					return false;
+				}	
+			}
+			return true;
+		}
+		else {
+			return false;	
+		}
+	}
+	
+	/**
+	 * sets guideline, stipulation or legislation used for determining conformity
+	 * 
+	 * @param declaration {@link Property}
+	 */
+	public void setGuidelineForConformityDeclaration(Property declaration) {
+		addSubModelElement(declaration);
+	}
+	
+	/**
+	 * sets guideline, stipulation or legislation used for determining conformity
+	 * 
+	 * @param declaration {@link String}
+	 */
+	public void setGuidelineForConformityDeclaration(String declaration) {
+		Property declarationProp = new Property(GUIDELINEFORCONFORMITYDECLARATIONID, PropertyValueTypeDef.String);
+		declarationProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO856#002", IdentifierType.IRDI)));
+		declarationProp.set(declaration);
+		setGuidelineForConformityDeclaration(declarationProp);
+	}
+	
+	/**
+	 * gets sets guideline, stipulation or legislation used for determining conformity
+	 * 
+	 * @return
+	 */
+	public IProperty getGuidelineForConformityDeclaration() {
+		return (IProperty) getSubmodelElement(GUIDELINEFORCONFORMITYDECLARATIONID);
+	}
+	
+	/**
+	 * Gets arbitrary, representing information required by further standards
+	 * @return
+	 */
+	public List<IProperty> getArbitrary() {
+		List<IProperty> ret = new ArrayList<IProperty>();
+		Map<String, ISubmodelElement> elemMap = getSubmodelElements();
+		if (elemMap != null && elemMap.size() > 0) {
+			for (Map.Entry<String, ISubmodelElement> singleElement: elemMap.entrySet()) {
+				if (!singleElement.getKey().equals(GUIDELINEFORCONFORMITYDECLARATIONID)) {
+					ret.add((IProperty) singleElement.getValue());
+				}
+			}
+		}
+		return ret;
+	}
+
+	/**
+	 * Sets arbitrary, representing information required by further standards
+	 * @param arbitraries
+	 */
+	public void setArbitrary(List<Property> arbitraries) {
+		if (arbitraries != null & arbitraries.size() > 0) {
+			for (Property prop : arbitraries) {
+				addSubModelElement(prop);
+			}
+		}
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Marking.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Marking.java
new file mode 100644
index 0000000..2e88634
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Marking.java
@@ -0,0 +1,207 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IFile;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.File;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.helper.DigitalNameplateSubmodelHelper;
+
+/**
+ * Marking as defined in the AAS Digital Nameplate Template document <br/>
+ * It is a submodel element collection which
+ * contains information about the marking labelled on the device
+ * 
+ * @author haque
+ *
+ */
+public class Marking extends SubmodelElementCollection {
+	public static final String MARKINGNAMEID = "MarkingName";
+	public static final String MARKINGFILEID = "MarkingFile";
+	public static final String MARKINGADDITIONALTEXTPREFIX = "MarkingAdditionalText";
+	public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "https://admin-shell.io/zvei/nameplate/0/1/Nameplate/Markings/Marking", KeyType.IRI));
+	
+	private Marking() {
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * 
+	 * @param idShort
+	 * @param markingName
+	 * @param markingFile
+	 */
+	public Marking(String idShort, Property markingName, File markingFile) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setMarkingAdditionalText(new ArrayList<Property>());
+		setMarkingName(markingName);
+		setMarkingFile(markingFile);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * 
+	 * @param idShort
+	 * @param markingName
+	 * @param markingFile
+	 */
+	public Marking(String idShort, String markingName, File markingFile) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setMarkingAdditionalText(new ArrayList<Property>());
+		setMarkingName(markingName);
+		setMarkingFile(markingFile);
+	}
+	
+	/**
+	 * Creates a Marking SMC object from a map
+	 * 
+	 * @param obj a Marking SMC object as raw map
+	 * @return a Marking SMC object, that behaves like a facade for the given map
+	 */
+	public static Marking createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(Marking.class, obj);
+		}
+		
+		Marking marking = new Marking();
+		marking.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return marking;
+	}
+	
+	/**
+	 * Creates a Marking SMC object from a map without validation
+	 * 
+	 * @param obj a Marking SMC object as raw map
+	 * @return a Marking SMC object, that behaves like a facade for the given map
+	 */
+	private static Marking createAsFacadeNonStrict(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		Marking marking = new Marking();
+		marking.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return marking;
+	}
+	
+	/**
+	 * Check whether all mandatory elements for Marking SMC
+	 * exist in the map
+	 * 
+	 * @param obj
+	 * 
+	 * @return true/false
+	 */
+	@SuppressWarnings("unchecked")
+	public static boolean isValid(Map<String, Object> obj) {
+		Marking marking = createAsFacadeNonStrict(obj);
+		return SubmodelElementCollection.isValid(obj)
+				&& Property.isValid((Map<String, Object>) marking.getMarkingName())
+				&& File.isValid((Map<String, Object>) marking.getMarkingFile());
+	}
+	
+	/**
+	 * sets common name of the marking
+	 * 
+	 * Note: CE marking is declared as mandatory according to EU
+     * Machine Directive 2006/42/EC.
+	 * @param markingName
+	 */
+	public void setMarkingName(Property markingName) {
+		addSubModelElement(markingName);
+	}
+	
+	/**
+	 * sets common name of the marking
+	 * 
+	 * Note: CE marking is declared as mandatory according to EU
+     * Machine Directive 2006/42/EC.
+	 * @param markingName
+	 */
+	public void setMarkingName(String markingName) {
+		Property markingNameProp = new Property(MARKINGNAMEID, PropertyValueTypeDef.String);
+		markingNameProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "https://admin-shell.io/zvei/nameplate/1/0/Nameplate/Markings/Marking/MarkingName", IdentifierType.IRDI)));
+		markingNameProp.set(markingName);
+		setMarkingName(markingNameProp);
+	}
+	
+	/**
+	 * gets common name of the marking
+	 * 
+	 * Note: CE marking is declared as mandatory according to EU
+     * Machine Directive 2006/42/EC.
+	 * @return
+	 */
+	public IProperty getMarkingName() {
+		return (IProperty) getSubmodelElement(MARKINGNAMEID);
+	}
+	
+	/**
+	 * sets picture of the marking
+     * 
+     * Note: CE marking is declared as mandatory according to EU
+     * Machine Directive 2006/42/EC.
+	 * @param markingFile
+	 */
+	public void setMarkingFile(File markingFile) {
+		addSubModelElement(markingFile);
+	}
+	
+	/**
+	 * gets picture of the marking
+     * 
+     * Note: CE marking is declared as mandatory according to EU
+     * Machine Directive 2006/42/EC.
+	 * @return
+	 */
+	public IFile getMarkingFile() {
+		return (IFile) getSubmodelElement(MARKINGFILEID);
+	}
+	
+	/**
+	 * sets where applicable, additional information on the marking in
+     * plain text
+	 * @param markingAdditionalText
+	 */
+	public void setMarkingAdditionalText(List<Property> markingAdditionalText) {
+		if (markingAdditionalText != null && markingAdditionalText.size() > 0) {
+			for (Property markingAdditionalSingle : markingAdditionalText) {
+				addSubModelElement(markingAdditionalSingle);
+			}
+		}
+	}
+	
+	/**
+	 * gets where applicable, additional information on the marking in
+     * plain text
+	 * @return
+	 */
+	public List<IProperty> getMarkingAdditionalText() {
+		List<IProperty> ret = new ArrayList<IProperty>();
+		List<ISubmodelElement> elements = DigitalNameplateSubmodelHelper.getSubmodelElementsByIdPrefix(MARKINGADDITIONALTEXTPREFIX, getSubmodelElements());
+		
+		for (ISubmodelElement element: elements) {
+			ret.add((IProperty) element);
+		}
+		return ret;
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Markings.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Markings.java
new file mode 100644
index 0000000..ec6d2e2
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Markings.java
@@ -0,0 +1,148 @@
+package org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.types.digitalnameplate.helper.DigitalNameplateSubmodelHelper;
+
+/**
+ * Markings as defined in the AAS Digital Nameplate Template document <br/>
+ * It is a submodel element collection which contains a collection of product markings
+ * 
+ * Note: CE marking is declared as mandatory according to EU Machine Directive 2006/42/EC.
+ * 
+ * @author haque
+ *
+ */
+public class Markings extends SubmodelElementCollection {
+	public static final String IDSHORT = "Markings";
+	public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "https://admin-shell.io/zvei/nameplate/1/0/Nameplate/Markings", KeyType.IRI));
+	public static final String MARKINGPREFIX = "Marking";
+	
+	private Markings() {
+	}
+	
+	/**
+	 * Constructor with default idShort
+	 * @param markings
+	 */
+	public Markings(List<Marking> markings) {
+		this(IDSHORT, markings);
+	}
+	
+	/**
+	 * Constructor with mandatory attributes
+	 * 
+	 * @param idShort
+	 * @param markings
+	 */
+	public Markings(String idShort, List<Marking> markings) {
+		super(idShort);
+		setSemanticID(SEMANTICID);
+		setMarking(markings);
+	}
+	
+	/**
+	 * Creates a Markings SMC object from a map
+	 * 
+	 * @param obj a Markings SMC object as raw map
+	 * @return a Markings SMC object, that behaves like a facade for the given map
+	 */
+	public static Markings createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(Markings.class, obj);
+		}
+		
+		Markings markings = new Markings();
+		markings.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return markings;
+	}
+	
+	/**
+	 * Creates a Markings SMC object from a map without validation
+	 * 
+	 * @param obj a Markings SMC object as raw map
+	 * @return a Markings SMC object, that behaves like a facade for the given map
+	 */
+	private static Markings createAsFacadeNonStrict(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+		
+		Markings markings = new Markings();
+		markings.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
+		return markings;
+	}
+	
+	/**
+	 * Check whether all mandatory elements for Markings SMC
+	 * exist in the map
+	 * 
+	 * @param obj
+	 * 
+	 * @return true/false
+	 */
+	public static boolean isValid(Map<String, Object> obj) {
+		Markings markings = createAsFacadeNonStrict(obj);
+		
+		if (SubmodelElementCollection.isValid(obj)
+				&& markings.getMarking() != null
+				&& markings.getMarking().size() > 0) {
+			for (Marking marking : markings.getMarking()) {
+				if (!Marking.isValid((Map<String, Object>) marking)) {
+					return false;
+				}	
+			}
+			return true;
+		}
+		else {
+			return false;	
+		}
+	}
+	
+	/**
+	 * sets information about the marking labelled on the device
+
+     * Note: CE marking is declared as mandatory according to EU Machine
+     * Directive 2006/42/EC.
+	 * @param markingName
+	 */
+	public void setMarking(List<Marking> markings) {
+		if (markings != null && markings.size() > 0) {
+			for (Marking prop : markings) {
+				addSubModelElement(prop);
+			}
+		}
+	}
+	
+	/**
+	 * gets information about the marking labelled on the device
+
+     * Note: CE marking is declared as mandatory according to EU Machine
+     * Directive 2006/42/EC.
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<Marking> getMarking() {
+		List<Marking> ret = new ArrayList<Marking>();
+		List<ISubmodelElement> elements = DigitalNameplateSubmodelHelper.getSubmodelElementsByIdPrefix(MARKINGPREFIX, getSubmodelElements());
+		
+		for (ISubmodelElement element: elements) {
+			ret.add(Marking.createAsFacade((Map<String, Object>) element));
+		}
+		return ret;
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/submodelelement/dataelement/TestConnectedBlob.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/submodelelement/dataelement/TestConnectedBlob.java
index 5a60db2..08ac9e9 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/submodelelement/dataelement/TestConnectedBlob.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/submodelelement/dataelement/TestConnectedBlob.java
@@ -30,7 +30,7 @@
 	@Before
 	public void build() {
 		blob = new Blob("testIdShort", "mimeType");
-		byte[] value = BLOB_CONTENT.getBytes(StandardCharsets.US_ASCII);
+		byte[] value = BLOB_CONTENT.getBytes(StandardCharsets.UTF_8);
 		blob.setByteArrayValue(value);
 		
 		VABConnectionManagerStub manager = new VABConnectionManagerStub(
@@ -45,7 +45,7 @@
 	@Test
 	public void testGetValue() {
 		assertEquals(blob.getValue(), connectedBlob.getValue());
-		byte[] byteArray = BLOB_CONTENT.getBytes(StandardCharsets.US_ASCII);
+		byte[] byteArray = BLOB_CONTENT.getBytes(StandardCharsets.UTF_8);
 		assertEquals(Base64.getEncoder().encodeToString(byteArray), blob.getValue());
 
 	}
@@ -56,7 +56,7 @@
 	@Test
 	public void testGetByteArrayValue() {
 		assertArrayEquals(blob.getByteArrayValue(), connectedBlob.getByteArrayValue());
-		assertArrayEquals(BLOB_CONTENT.getBytes(StandardCharsets.US_ASCII), connectedBlob.getByteArrayValue());
+		assertArrayEquals(BLOB_CONTENT.getBytes(StandardCharsets.UTF_8), connectedBlob.getByteArrayValue());
 	}
 	
 	/**
@@ -68,21 +68,21 @@
 	}
 	
 	/**
-	 * Tests if getASCIIString() returns the correct value
+	 * Tests if getUTF8String() returns the correct value
 	 */
 	@Test
-	public void testGetASCII() {
-		assertEquals(BLOB_CONTENT, connectedBlob.getASCIIString());
+	public void testGetUTF8() {
+		assertEquals(BLOB_CONTENT, connectedBlob.getUTF8String());
 	}
 
 	/**
-	 * Tests if SetASCII sets the correct value
+	 * Tests if SetUTF8 sets the correct value
 	 */
 	@Test
-	public void testSetASCII() {
-		connectedBlob.setASCIIString("NEW");
-		assertEquals("NEW", connectedBlob.getASCIIString());
-		assertArrayEquals("NEW".getBytes(StandardCharsets.US_ASCII), connectedBlob.getByteArrayValue());
+	public void testSetUTF8() {
+		connectedBlob.setUTF8String("NEW");
+		assertEquals("NEW", connectedBlob.getUTF8String());
+		assertArrayEquals("NEW".getBytes(StandardCharsets.UTF_8), connectedBlob.getByteArrayValue());
 	}
 
 	/**
@@ -90,10 +90,10 @@
 	 */
 	@Test
 	public void testSetByteArray() {
-		byte[] newArrayValue = "NEW".getBytes(StandardCharsets.US_ASCII);
+		byte[] newArrayValue = "NEW".getBytes(StandardCharsets.UTF_8);
 		connectedBlob.setByteArrayValue(newArrayValue);
-		assertEquals("NEW", connectedBlob.getASCIIString());
-		assertArrayEquals("NEW".getBytes(StandardCharsets.US_ASCII), connectedBlob.getByteArrayValue());
+		assertEquals("NEW", connectedBlob.getUTF8String());
+		assertArrayEquals("NEW".getBytes(StandardCharsets.UTF_8), connectedBlob.getByteArrayValue());
 	}
 
 	/**
@@ -101,9 +101,9 @@
 	 */
 	@Test
 	public void testSetValue() {
-		byte[] newArrayValue = "NEW".getBytes(StandardCharsets.US_ASCII);
+		byte[] newArrayValue = "NEW".getBytes(StandardCharsets.UTF_8);
 		String newStringValue = Base64.getEncoder().encodeToString(newArrayValue);
 		connectedBlob.setValue(newStringValue);
-		assertEquals("NEW", connectedBlob.getASCIIString());
+		assertEquals("NEW", connectedBlob.getUTF8String());
 	}
 }
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/submodelelement/dataelement/TestBlob.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/submodelelement/dataelement/TestBlob.java
index 1704faf..922e6ea 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/submodelelement/dataelement/TestBlob.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/submodelelement/dataelement/TestBlob.java
@@ -22,7 +22,7 @@
 
 	protected Blob blob;
 	protected String testString = "NEW!";
-	protected byte[] testBytes = testString.getBytes(StandardCharsets.US_ASCII);
+	protected byte[] testBytes = testString.getBytes(StandardCharsets.UTF_8);
 	protected String testBase64 = Base64.getEncoder().encodeToString(testBytes);
 	
 	@Before
@@ -52,18 +52,18 @@
 	@Test
 	public void testSetValue() {
 		blob.setValue(testBase64);
-		assertEquals(testString, blob.getASCIIString());
+		assertEquals(testString, blob.getUTF8String());
 		assertArrayEquals(testBytes, blob.getByteArrayValue());
 		assertEquals(testBase64, blob.getValue());
 	}
 	
 	/**
-	 * Tests if setASCII sets the correct value
+	 * Tests if setUTF8 sets the correct value
 	 */
 	@Test
-	public void testSetASCII() {
-		blob.setASCIIString(testString);
-		assertEquals(testString, blob.getASCIIString());
+	public void testSetUTF8() {
+		blob.setUTF8String(testString);
+		assertEquals(testString, blob.getUTF8String());
 		assertArrayEquals(testBytes, blob.getByteArrayValue());
 		assertEquals(testBase64, blob.getValue());
 	}
@@ -74,7 +74,7 @@
 	@Test
 	public void testSetByteArray() {
 		blob.setByteArrayValue(testBytes);
-		assertEquals(testString, blob.getASCIIString());
+		assertEquals(testString, blob.getUTF8String());
 		assertArrayEquals(testBytes, blob.getByteArrayValue());
 		assertEquals(testBase64, blob.getValue());
 	}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/TestDigitalNameplateSubmodel.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/TestDigitalNameplateSubmodel.java
new file mode 100644
index 0000000..b2e1c39
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/TestDigitalNameplateSubmodel.java
@@ -0,0 +1,162 @@
+package org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Address;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties.AssetSpecificProperties;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings.Marking;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings.Markings;
+import org.eclipse.basyx.submodel.types.digitalnameplate.DigitalNameplateSubmodel;
+import org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.address.TestAddress;
+import org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties.TestAssetSpecificProperties;
+import org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.markings.TestMarking;
+import org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.markings.TestMarkings;
+import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests createAsFacade and isValid of {@link DigitalNameplateSubmodel} for their
+ * correctness
+ * 
+ * @author haque
+ *
+ */
+public class TestDigitalNameplateSubmodel {
+	public static MultiLanguageProperty manufacturerName = new MultiLanguageProperty(DigitalNameplateSubmodel.MANUFACTURERNAMEID);
+	public static MultiLanguageProperty designation = new MultiLanguageProperty(DigitalNameplateSubmodel.MANUFACTURERPRODUCTDESIGNATIONID);
+	public static Address address = new Address(TestAddress.street, TestAddress.zipCode, TestAddress.cityTown, TestAddress.nationalCode);
+	public static MultiLanguageProperty productFamily = new MultiLanguageProperty(DigitalNameplateSubmodel.MANUFACTURERPRODUCTFAMILYID);
+	public static Property serialNumber = new Property(DigitalNameplateSubmodel.SERIALNUMBERID, PropertyValueTypeDef.String);
+	public static Property yearsOfConstruction = new Property(DigitalNameplateSubmodel.YEARSOFCONSTRUCTIONID, PropertyValueTypeDef.String);
+	public static Markings markings;
+	public static AssetSpecificProperties assetSpecificProperties = new AssetSpecificProperties(Collections.singletonList(TestAssetSpecificProperties.guidelineSpecificProperties));
+	public static Identifier identifier = new Identifier(IdentifierType.IRI, "https://admin-shell.io/zvei/nameplate/1/0/Nameplate");
+	private Map<String, Object> submodelMap = new HashMap<String, Object>();
+	
+	@Before
+	public void buildFax() {
+		manufacturerName.setValue(new LangStrings(new LangString("DE", "Test Manufacturer")));
+		designation.setValue(new LangStrings(new LangString("DE", "Test Designation")));
+		productFamily.setValue(new LangStrings(new LangString("DE", "Test Product Family")));
+		serialNumber.setValue("123456");
+		yearsOfConstruction.setValue("2020");
+		
+		TestMarking.markingFile.setIdShort(Marking.MARKINGFILEID);
+		TestMarking.markingName.setValue("0173-1#07-DAA603#004");
+		TestMarkings.marking = new Marking(TestMarking.IDSHORT, TestMarking.markingName, TestMarking.markingFile);
+		TestMarkings.marking.setParent(new Reference(new Key(KeyElements.SUBMODELELEMENTCOLLECTION, true, Markings.IDSHORT, IdentifierType.IRDI)));
+		TestMarkings.markings = new ArrayList<Marking>();
+		TestMarkings.markings.add(TestMarkings.marking);
+		markings = new Markings(TestMarkings.markings);
+		
+		TestAddress.street.setValue(new LangStrings(new LangString("DE", "musterstraße 1")));
+		TestAddress.zipCode.setValue(new LangStrings(new LangString("DE", "12345")));
+		TestAddress.cityTown.setValue(new LangStrings(new LangString("DE", "MusterStadt")));
+		TestAddress.nationalCode.setValue(new LangStrings(new LangString("DE", "DE")));
+		
+		List<ISubmodelElement> elements = new ArrayList<ISubmodelElement>();
+		elements.add(manufacturerName);
+		elements.add(designation);
+		elements.add(productFamily);
+		elements.add(serialNumber);
+		elements.add(yearsOfConstruction);
+		elements.add(markings);
+		elements.add(address);
+		elements.add(assetSpecificProperties);
+		submodelMap.put(Referable.IDSHORT, DigitalNameplateSubmodel.SUBMODELID);
+		submodelMap.put(HasSemantics.SEMANTICID, DigitalNameplateSubmodel.SEMANTICID);
+		submodelMap.put(SubModel.SUBMODELELEMENT, elements);
+		submodelMap.put(Identifiable.IDENTIFICATION, identifier);
+	}
+
+	@Test
+	public void testCreateAsFacade() {
+		DigitalNameplateSubmodel submodelFromMap = DigitalNameplateSubmodel.createAsFacade(submodelMap);
+		assertEquals(DigitalNameplateSubmodel.SEMANTICID, submodelFromMap.getSemanticId());
+		assertEquals(manufacturerName, submodelFromMap.getManufacturerName());
+		assertEquals(designation, submodelFromMap.getManufacturerProductDesignation());
+		assertEquals(address, submodelFromMap.getAddress());
+		assertEquals(productFamily, submodelFromMap.getManufacturerProductFamily());
+		assertEquals(serialNumber, submodelFromMap.getSerialNumber());
+		assertEquals(yearsOfConstruction, submodelFromMap.getYearOfConstruction());
+		assertEquals(markings, submodelFromMap.getMarkings());
+		assertEquals(assetSpecificProperties, submodelFromMap.getAssetSpecificProperties());
+		assertEquals(DigitalNameplateSubmodel.SUBMODELID, submodelFromMap.getIdShort());
+		assertEquals(identifier, submodelFromMap.getIdentification());
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdShort() {
+		submodelMap.remove(Referable.IDSHORT);
+		DigitalNameplateSubmodel.createAsFacade(submodelMap);
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdentifier() {
+		submodelMap.remove(Identifiable.IDENTIFICATION);
+		DigitalNameplateSubmodel.createAsFacade(submodelMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionManufacturerName() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)submodelMap.get(SubModel.SUBMODELELEMENT);
+		elements.remove(manufacturerName);
+		DigitalNameplateSubmodel.createAsFacade(submodelMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionZearsOfConstruction() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)submodelMap.get(SubModel.SUBMODELELEMENT);
+		elements.remove(yearsOfConstruction);
+		DigitalNameplateSubmodel.createAsFacade(submodelMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionManufacturerProductDesignation() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)submodelMap.get(SubModel.SUBMODELELEMENT);
+		elements.remove(designation);
+		DigitalNameplateSubmodel.createAsFacade(submodelMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionAddress() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)submodelMap.get(SubModel.SUBMODELELEMENT);
+		elements.remove(address);
+		DigitalNameplateSubmodel.createAsFacade(submodelMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionManufacturerProductFamily() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)submodelMap.get(SubModel.SUBMODELELEMENT);
+		elements.remove(productFamily);
+		DigitalNameplateSubmodel.createAsFacade(submodelMap);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestAddress.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestAddress.java
new file mode 100644
index 0000000..1d4ad2e
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestAddress.java
@@ -0,0 +1,162 @@
+package org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.address;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Address;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Email;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Fax;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Phone;
+import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests createAsFacade and isValid of {@link Address} for their
+ * correctness
+ * 
+ * @author haque
+ *
+ */
+public class TestAddress {
+	public static final String IDSHORT = "testAddressId";
+	public static MultiLanguageProperty department = new MultiLanguageProperty(Address.DEPARTMENTID);
+	public static MultiLanguageProperty street = new MultiLanguageProperty(Address.STREETID);
+	public static MultiLanguageProperty zipCode = new MultiLanguageProperty(Address.ZIPCODEID);
+	public static MultiLanguageProperty poBox = new MultiLanguageProperty(Address.POBOXID);
+	public static MultiLanguageProperty zipPoBox = new MultiLanguageProperty(Address.ZIPCODEOFPOBOXID);
+	public static MultiLanguageProperty cityTown = new MultiLanguageProperty(Address.CITYTOWNID);
+	public static MultiLanguageProperty stateCounty = new MultiLanguageProperty(Address.STATECOUNTYID);
+	public static MultiLanguageProperty nationalCode = new MultiLanguageProperty(Address.NATIONALCODEID);
+	public static MultiLanguageProperty vatNumber = new MultiLanguageProperty(Address.VATNUMBERID);
+	public static MultiLanguageProperty addressRemarks = new MultiLanguageProperty(Address.ADDRESSREMARKSID);
+	public static Property additLink = new Property(Address.ADDRESSOFADDITIONALLINKID, PropertyValueTypeDef.String);
+	public static Phone phone1 = new Phone("Phone01", new LangString("DE", "123456789"));
+	public static Phone phone2 = new Phone("Phone02", new LangString("US", "123456711"));
+	public static Fax fax1 = new Fax("Fax01", new LangString("DE", "123456789"));
+	public static Fax fax2 = new Fax("Fax02", new LangString("DE", "123456711"));
+	public static Email email1 = new Email("Email01", new Property(Email.EMAILADDRESSID, "abc@test.com"));
+	public static Email email2 = new Email("Email02", new Property(Email.EMAILADDRESSID, "abcd@test.com"));
+	
+
+	private Map<String, Object> addressMap = new HashMap<String, Object>();
+	
+	@Before
+	public void buildFax() {
+		department.setValue(new LangStrings(new LangString("DE", "Dept Test")));
+		street.setValue(new LangStrings(new LangString("DE", "musterstraße 1")));
+		zipCode.setValue(new LangStrings(new LangString("DE", "12345")));
+		poBox.setValue(new LangStrings(new LangString("DE", "PE 1234")));
+		zipPoBox.setValue(new LangStrings(new LangString("DE", "12345")));
+		cityTown.setValue(new LangStrings(new LangString("DE", "MusterStadt")));
+		stateCounty.setValue(new LangStrings(new LangString("DE", "RLP")));
+		nationalCode.setValue(new LangStrings(new LangString("DE", "DE")));
+		vatNumber.setValue(new LangStrings(new LangString("DE", "123456")));
+		addressRemarks.setValue(new LangStrings(new LangString("DE", "test remarks")));
+		additLink.setValue("test.com");
+		
+		List<ISubmodelElement> elements = new ArrayList<ISubmodelElement>();
+		elements.add(department);
+		elements.add(street);
+		elements.add(zipCode);
+		elements.add(poBox);
+		elements.add(zipPoBox);
+		elements.add(cityTown);
+		elements.add(stateCounty);
+		elements.add(nationalCode);
+		elements.add(vatNumber);
+		elements.add(addressRemarks);
+		elements.add(additLink);
+		elements.add(phone1);
+		elements.add(phone2);
+		elements.add(fax1);
+		elements.add(fax2);
+		elements.add(email1);
+		elements.add(email2);
+		
+		addressMap.put(Referable.IDSHORT, IDSHORT);
+		addressMap.put(HasSemantics.SEMANTICID, Address.SEMANTICID);
+		addressMap.put(Property.VALUE, elements);
+	}
+	
+	@Test
+	public void testCreateAsFacade() {
+		Address addressFromMap = Address.createAsFacade(addressMap);
+		assertEquals(Address.SEMANTICID, addressFromMap.getSemanticId());
+		assertEquals(IDSHORT, addressFromMap.getIdShort());
+		assertEquals(department, addressFromMap.getDepartment());
+		assertEquals(street, addressFromMap.getStreet());
+		assertEquals(poBox, addressFromMap.getPOBox());
+		assertEquals(zipPoBox, addressFromMap.getZipCodeOfPOBox());
+		assertEquals(cityTown, addressFromMap.getCityTown());
+		assertEquals(stateCounty, addressFromMap.getStateCounty());
+		assertEquals(nationalCode, addressFromMap.getNationalCode());
+		assertEquals(zipCode, addressFromMap.getZipCode());
+		assertEquals(vatNumber, addressFromMap.getVatNumber());
+		assertEquals(addressRemarks, addressFromMap.getAddressRemarks());
+		assertEquals(additLink, addressFromMap.getAddressOfAdditionalLink());
+		List<Phone> phones = new ArrayList<Phone>();
+		phones.add(phone2);
+		phones.add(phone1);
+		List<Fax> faxes = new ArrayList<Fax>();
+		faxes.add(fax1);
+		faxes.add(fax2);
+		List<Email> emails = new ArrayList<Email>();
+		emails.add(email2);
+		emails.add(email1);
+		assertEquals(phones, addressFromMap.getPhone());
+		assertEquals(faxes, addressFromMap.getFax());
+		assertEquals(emails, addressFromMap.getEmail());
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdShort() {
+		addressMap.remove(Referable.IDSHORT);
+		Address.createAsFacade(addressMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionStreet() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)addressMap.get(Property.VALUE);
+		elements.remove(street);
+		Address.createAsFacade(addressMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionZipCode() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)addressMap.get(Property.VALUE);
+		elements.remove(zipCode);
+		Address.createAsFacade(addressMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionCityTown() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)addressMap.get(Property.VALUE);
+		elements.remove(cityTown);
+		Address.createAsFacade(addressMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionNationalCode() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)addressMap.get(Property.VALUE);
+		elements.remove(nationalCode);
+		Address.createAsFacade(addressMap);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestEmail.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestEmail.java
new file mode 100644
index 0000000..f675c50
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestEmail.java
@@ -0,0 +1,81 @@
+package org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.address;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.enums.MailType;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Email;
+import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests createAsFacade and isValid of {@link Email} for their
+ * correctness
+ * 
+ * @author haque
+ *
+ */
+public class TestEmail {
+	public static final String IDSHORT = "testEmailId";
+	public static Property emailAddress = new Property(Email.EMAILADDRESSID, PropertyValueTypeDef.String);
+	public static MultiLanguageProperty publicKey = new MultiLanguageProperty(Email.PUBLICKEYID);
+	public static Property typeOfEmailAddress = new Property(Email.TYPEOFEMAILADDRESSID, PropertyValueTypeDef.String);
+	public static MultiLanguageProperty typeOfPublicKey = new MultiLanguageProperty(Email.TYPEOFPUBLICKEYID);
+
+	private Map<String, Object> emailMap = new HashMap<String, Object>();
+	
+	@Before
+	public void buildFax() {
+		emailAddress.set("test@muster-ag.de");
+		publicKey.setValue(new LangStrings(new LangString("DE", "123456")));
+		typeOfEmailAddress.setValue(MailType.SECRETARY);
+		typeOfPublicKey.setValue(new LangStrings(new LangString("DE", "1234")));
+		List<ISubmodelElement> elements = new ArrayList<ISubmodelElement>();
+		elements.add(emailAddress);
+		elements.add(publicKey);
+		elements.add(typeOfEmailAddress);
+		elements.add(typeOfPublicKey);
+		emailMap.put(Referable.IDSHORT, IDSHORT);
+		emailMap.put(HasSemantics.SEMANTICID, Email.SEMANTICID);
+		emailMap.put(Property.VALUE, elements);
+	}
+	
+	@Test
+	public void testCreateAsFacade() {
+		Email emailFromMap = Email.createAsFacade(emailMap);
+		assertEquals(Email.SEMANTICID, emailFromMap.getSemanticId());
+		assertEquals(emailAddress, emailFromMap.getEmailAddress());
+		assertEquals(publicKey, emailFromMap.getPublicKey());
+		assertEquals(typeOfEmailAddress, emailFromMap.getTypeOfEmailAddress());
+		assertEquals(typeOfPublicKey, emailFromMap.getTypeOfPublicKey());
+		assertEquals(IDSHORT, emailFromMap.getIdShort());
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdShort() {
+		emailMap.remove(Referable.IDSHORT);
+		Email.createAsFacade(emailMap);
+	}
+	
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionEmailAddress() {
+		List<ISubmodelElement> newElements = new ArrayList<ISubmodelElement>();
+		newElements.add(typeOfEmailAddress);
+		emailMap.put(Property.VALUE, newElements);
+		Email.createAsFacade(emailMap);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestFax.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestFax.java
new file mode 100644
index 0000000..c73c2c6
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestFax.java
@@ -0,0 +1,73 @@
+package org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.address;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.enums.FaxType;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Fax;
+import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests createAsFacade and isValid of {@link Fax} for their
+ * correctness
+ * 
+ * @author haque
+ *
+ */
+public class TestFax {
+	public static final String IDSHORT = "testFaxId";
+	public static MultiLanguageProperty faxNumber = new MultiLanguageProperty(Fax.FAXNUMBERID);
+	public static Property typeOfFax = new Property(Fax.TYPEOFFAXID, PropertyValueTypeDef.String);
+
+	private Map<String, Object> faxMap = new HashMap<String, Object>();
+	
+	@Before
+	public void buildFax() {
+		faxNumber.setValue(new LangStrings(new LangString("DE", "0631123456")));
+		typeOfFax.setValue(FaxType.HOME);
+		List<ISubmodelElement> elements = new ArrayList<ISubmodelElement>();
+		elements.add(faxNumber);
+		elements.add(typeOfFax);
+		faxMap.put(Referable.IDSHORT, IDSHORT);
+		faxMap.put(HasSemantics.SEMANTICID, Fax.SEMANTICID);
+		faxMap.put(Property.VALUE, elements);
+	}
+
+	@Test
+	public void testCreateAsFacade() {
+		Fax faxFromMap = Fax.createAsFacade(faxMap);
+		assertEquals(Fax.SEMANTICID, faxFromMap.getSemanticId());
+		assertEquals(faxNumber, faxFromMap.getFaxNumber());
+		assertEquals(typeOfFax, faxFromMap.getTypeOfFaxNumber());
+		assertEquals(IDSHORT, faxFromMap.getIdShort());
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdShort() {
+		faxMap.remove(Referable.IDSHORT);
+		Fax.createAsFacade(faxMap);
+	}
+	
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionFaxNumber() {
+		List<ISubmodelElement> newElements = new ArrayList<ISubmodelElement>();
+		newElements.add(typeOfFax);
+		faxMap.put(Property.VALUE, newElements);
+		Fax.createAsFacade(faxMap);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestPhone.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestPhone.java
new file mode 100644
index 0000000..ed0014b
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/address/TestPhone.java
@@ -0,0 +1,72 @@
+package org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.address;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.enums.PhoneType;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Phone;
+import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests createAsFacade and isValid of {@link Phone} for their
+ * correctness
+ * 
+ * @author haque
+ *
+ */
+public class TestPhone {
+	public static final String IDSHORT = "testPhoneId";
+	public static MultiLanguageProperty telephone = new MultiLanguageProperty(Phone.TELEPHONENUMBERID);
+	public static Property typeOfTelephone = new Property(Phone.TYPEOFTELEPHONEID, PropertyValueTypeDef.String);
+	private Map<String, Object> phoneMap = new HashMap<String, Object>();
+	
+	@Before
+	public void buildPhone() {
+		telephone.setValue(new LangStrings(new LangString("DE", "0631123456")));
+		typeOfTelephone.setValue(PhoneType.HOME);
+		List<ISubmodelElement> elements = new ArrayList<ISubmodelElement>();
+		elements.add(telephone);
+		elements.add(typeOfTelephone);
+		phoneMap.put(Referable.IDSHORT, IDSHORT);
+		phoneMap.put(HasSemantics.SEMANTICID, Phone.SEMANTICID);
+		phoneMap.put(Property.VALUE, elements);
+	}
+	
+	@Test
+	public void testCreateAsFacade() {
+		Phone phoneFromMap = Phone.createAsFacade(phoneMap);
+		assertEquals(Phone.SEMANTICID, phoneFromMap.getSemanticId());
+		assertEquals(telephone, phoneFromMap.getTelephoneNumber());
+		assertEquals(typeOfTelephone, phoneFromMap.getTypeOfTelephone());
+		assertEquals(IDSHORT, phoneFromMap.getIdShort());
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdShort() {
+		phoneMap.remove(Referable.IDSHORT);
+		Phone.createAsFacade(phoneMap);
+	}
+	
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionTelephoneNumber() {
+		List<ISubmodelElement> newElements = new ArrayList<ISubmodelElement>();
+		newElements.add(typeOfTelephone);
+		phoneMap.put(Property.VALUE, newElements);
+		Phone.createAsFacade(phoneMap);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/TestAssetSpecificProperties.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/TestAssetSpecificProperties.java
new file mode 100644
index 0000000..7f1ce1c
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/TestAssetSpecificProperties.java
@@ -0,0 +1,66 @@
+package org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties.AssetSpecificProperties;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties.GuidelineSpecificProperties;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests createAsFacade and isValid of {@link AssetSpecificProperties} for their
+ * correctness
+ * 
+ * @author haque
+ *
+ */
+public class TestAssetSpecificProperties {
+	public static final String IDSHORT = "AssetSpecificProperties";
+	public static GuidelineSpecificProperties guidelineSpecificProperties = new GuidelineSpecificProperties(TestGuidelineSpecificProperties.IDSHORT, TestGuidelineSpecificProperties.conformityDeclaration, Collections.singletonList(TestGuidelineSpecificProperties.arbitrary));
+	
+	private Map<String, Object> assetMap = new HashMap<String, Object>();
+	
+	@Before
+	public void buildAssetSpecificProperties() {
+		
+		List<ISubmodelElement> elements = new ArrayList<ISubmodelElement>();
+		elements.add(guidelineSpecificProperties);
+		
+		assetMap.put(Referable.IDSHORT, IDSHORT);
+		assetMap.put(HasSemantics.SEMANTICID, AssetSpecificProperties.SEMANTICID);
+		assetMap.put(Property.VALUE, elements);
+	}
+	
+	@Test
+	public void testCreateAsFacade() {
+		AssetSpecificProperties assetFromMap = AssetSpecificProperties.createAsFacade(assetMap);
+		assertEquals(AssetSpecificProperties.SEMANTICID, assetFromMap.getSemanticId());
+		assertEquals(Collections.singletonList(guidelineSpecificProperties), assetFromMap.getGuidelineSpecificProperties());
+		assertEquals(IDSHORT, assetFromMap.getIdShort());
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdShort() {
+		assetMap.remove(Referable.IDSHORT);
+		AssetSpecificProperties.createAsFacade(assetMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionGuideline() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)assetMap.get(Property.VALUE);
+		elements.remove(guidelineSpecificProperties);
+		AssetSpecificProperties.createAsFacade(assetMap);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/TestGuidelineSpecificProperties.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/TestGuidelineSpecificProperties.java
new file mode 100644
index 0000000..a04d4d8
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/TestGuidelineSpecificProperties.java
@@ -0,0 +1,80 @@
+package org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties.GuidelineSpecificProperties;
+import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests createAsFacade and isValid of {@link GuidelineSpecificProperties} for their
+ * correctness
+ * 
+ * @author haque
+ *
+ */
+public class TestGuidelineSpecificProperties {
+	public static final String IDSHORT = "GuidelineSpecificProperties01";
+	public static Property conformityDeclaration = new Property(GuidelineSpecificProperties.GUIDELINEFORCONFORMITYDECLARATIONID, PropertyValueTypeDef.String);
+	public static Property arbitrary = new Property("arbitraryId", PropertyValueTypeDef.String);
+	
+	private Map<String, Object> guidelineMap = new HashMap<String, Object>();
+	
+	@Before
+	public void buildGuidelineSpecificProperties() {
+		conformityDeclaration.setValue("test Declaration");
+		arbitrary.setValue("0173-1#07-DAA603#004");
+		
+		List<ISubmodelElement> elements = new ArrayList<ISubmodelElement>();
+		elements.add(conformityDeclaration);
+		elements.add(arbitrary);
+		
+		guidelineMap.put(Referable.IDSHORT, IDSHORT);
+		guidelineMap.put(HasSemantics.SEMANTICID, GuidelineSpecificProperties.SEMANTICID);
+		guidelineMap.put(Property.VALUE, elements);
+	}
+	
+	@Test
+	public void testCreateAsFacade() {
+		GuidelineSpecificProperties guidelineFromMap = GuidelineSpecificProperties.createAsFacade(guidelineMap);
+		assertEquals(GuidelineSpecificProperties.SEMANTICID, guidelineFromMap.getSemanticId());
+		assertEquals(conformityDeclaration, guidelineFromMap.getGuidelineForConformityDeclaration());
+		assertEquals(Collections.singletonList(arbitrary), guidelineFromMap.getArbitrary());
+		assertEquals(IDSHORT, guidelineFromMap.getIdShort());
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdShort() {
+		guidelineMap.remove(Referable.IDSHORT);
+		GuidelineSpecificProperties.createAsFacade(guidelineMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionArbitrary() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)guidelineMap.get(Property.VALUE);
+		elements.remove(arbitrary);
+		GuidelineSpecificProperties.createAsFacade(guidelineMap);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionDeclaration() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)guidelineMap.get(Property.VALUE);
+		elements.remove(conformityDeclaration);
+		GuidelineSpecificProperties.createAsFacade(guidelineMap);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/markings/TestMarking.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/markings/TestMarking.java
new file mode 100644
index 0000000..45557fa
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/markings/TestMarking.java
@@ -0,0 +1,85 @@
+package org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.markings;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.File;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings.Marking;
+import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests createAsFacade and isValid of {@link Marking} for their
+ * correctness
+ * 
+ * @author haque
+ *
+ */
+public class TestMarking {
+	public static final String IDSHORT = "Marking01";
+	public static Property markingName = new Property(Marking.MARKINGNAMEID, PropertyValueTypeDef.String);
+	public static File markingFile = new File("/to/the/image.jpg", "image/jpg");
+	public static Property additText = new Property(Marking.MARKINGADDITIONALTEXTPREFIX + "01", PropertyValueTypeDef.String);
+	
+	private Map<String, Object> markingMap = new HashMap<String, Object>();
+	
+	@Before
+	public void buildFax() {
+		markingFile.setIdShort(Marking.MARKINGFILEID);
+		markingName.setValue("0173-1#07-DAA603#004");
+		additText.setValue("text additional");
+		
+		List<ISubmodelElement> elements = new ArrayList<ISubmodelElement>();
+		elements.add(markingFile);
+		elements.add(markingName);
+		elements.add(additText);
+		
+		markingMap.put(Referable.IDSHORT, IDSHORT);
+		markingMap.put(HasSemantics.SEMANTICID, Marking.SEMANTICID);
+		markingMap.put(Property.VALUE, elements);
+	}
+	
+	@Test
+	public void testCreateAsFacade() {
+		Marking markingFromMap = Marking.createAsFacade(markingMap);
+		assertEquals(Marking.SEMANTICID, markingFromMap.getSemanticId());
+		assertEquals(markingFile, markingFromMap.getMarkingFile());
+		assertEquals(markingName, markingFromMap.getMarkingName());
+		assertEquals(Collections.singletonList(additText), markingFromMap.getMarkingAdditionalText());
+		assertEquals(IDSHORT, markingFromMap.getIdShort());
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdShort() {
+		markingMap.remove(Referable.IDSHORT);
+		Marking.createAsFacade(markingMap);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionMarkingName() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)markingMap.get(Property.VALUE);
+		elements.remove(markingName);
+		Marking.createAsFacade(markingMap);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Test (expected = ResourceNotFoundException.class)
+	public void testCreateAsFacadeExceptionMarkingFile() {
+		List<ISubmodelElement> elements = (List<ISubmodelElement>)markingMap.get(Property.VALUE);
+		elements.remove(markingFile);
+		Marking.createAsFacade(markingMap);
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/markings/TestMarkings.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/markings/TestMarkings.java
new file mode 100644
index 0000000..f57d5c8
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/markings/TestMarkings.java
@@ -0,0 +1,78 @@
+package org.eclipse.basyx.testsuite.regression.submodel.types.digitalnameplate.submodelelementcollections.markings;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings.Marking;
+import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings.Markings;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+
+/**
+ * Tests createAsFacade and isValid of {@link Markings} for their
+ * correctness
+ * 
+ * @author haque
+ *
+ */
+public class TestMarkings {
+	public static final String IDSHORT = "Markings";
+	public static List<Marking> markings;
+	public static Marking marking;
+
+	private Map<String, Object> markingsMap = new HashMap<String, Object>();
+	
+	@Before
+	public void initMarkings() {
+		TestMarking.markingFile.setIdShort(Marking.MARKINGFILEID);
+		TestMarking.markingName.setValue("0173-1#07-DAA603#004");
+		marking = new Marking(TestMarking.IDSHORT, TestMarking.markingName, TestMarking.markingFile);
+		marking.setParent(new Reference(new Key(KeyElements.SUBMODELELEMENTCOLLECTION, true, IDSHORT, IdentifierType.IRDI)));
+		markings = new ArrayList<Marking>();
+		markings.add(marking);
+		
+		markingsMap.put(Referable.IDSHORT, IDSHORT);
+		markingsMap.put(Property.VALUE, markings);
+		markingsMap.put(HasSemantics.SEMANTICID, Markings.SEMANTICID);
+	}
+	
+	@Test
+	public void testCreateAsFacade() {
+		Markings markingsFromMap = Markings.createAsFacade(markingsMap);
+		assertEquals(Markings.SEMANTICID, markingsFromMap.getSemanticId());
+		assertEquals(markings, markingsFromMap.getMarking());
+		assertEquals(IDSHORT, markingsFromMap.getIdShort());
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionIdShort() {
+		markingsMap.remove(Referable.IDSHORT);
+		Markings.createAsFacade(markingsMap);
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionNullMarkings() {
+		markingsMap.remove(Property.VALUE);
+		Markings.createAsFacade(markingsMap);
+	}
+	
+	@Test (expected = MetamodelConstructionException.class)
+	public void testCreateAsFacadeExceptionEmptyMarkings() {
+		markingsMap.put(Property.VALUE, new ArrayList<Marking>());
+		Markings.createAsFacade(markingsMap);
+	}
+}
