Merge branch 'dev'
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index d827e4a..a0f7004 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-bin.zip
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/EntityManager.java b/src/main/java/org/eclipse/mdm/api/dflt/EntityManager.java
index bb51184..ac126a7 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/EntityManager.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/EntityManager.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016 Gigatronik Ingolstadt GmbH
+ * Copyright (c) 2016 Gigatronik Ingolstadt GmbH and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,8 @@
 
 package org.eclipse.mdm.api.dflt;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -55,9 +57,19 @@
 	 * @throws DataAccessException
 	 *             Thrown if unable to retrieve the entity.
 	 */
-	<T extends Entity> T load(Class<T> entityClass, ContextType contextType, String instanceID)
-			throws DataAccessException;
+	default <T extends Entity> T load(Class<T> entityClass, ContextType contextType, String instanceID)
+			throws DataAccessException {
+		List<T> entities = load(entityClass, contextType, Collections.singletonList(instanceID));
+		if (entities.size() != 1) {
+			throw new DataAccessException("Failed to load entity by instance ID.");
+		}
+		return entities.get(0);
+		
+	}
 
+	<T extends Entity> List<T> load(Class<T> entityClass, ContextType contextType, Collection<String> instanceIDs)
+			throws DataAccessException;
+	
 	// default List<Status> loadAllStatus(Class<? extends StatusAttachable>
 	// entityClass) throws DataAccessException {
 	// return loadAllStatus(entityClass, "*");
@@ -148,7 +160,7 @@
 	 */
 	default <T extends Versionable> Optional<T> loadLatestValid(Class<T> entityClass, String name)
 			throws DataAccessException {
-		return loadAll(entityClass, name).stream().filter(v -> v.nameMatches(name)).filter(Versionable::isValid)
+		return loadAll(entityClass, name).stream().filter(v -> v.nameEquals(name)).filter(Versionable::isValid)
 				.max(Versionable.COMPARATOR);
 	}
 
@@ -170,7 +182,7 @@
 	 */
 	default <T extends Versionable> Optional<T> loadLatestValid(Class<T> entityClass, ContextType contextType,
 			String name) throws DataAccessException {
-		return loadAll(entityClass, contextType, name).stream().filter(v -> v.nameMatches(name))
+		return loadAll(entityClass, contextType, name).stream().filter(v -> v.nameEquals(name))
 				.filter(Versionable::isValid).max(Versionable.COMPARATOR);
 	}
 
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogAttribute.java b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogAttribute.java
index d0deee5..cf2eb29 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogAttribute.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogAttribute.java
@@ -16,6 +16,9 @@
 import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Describable;
+import org.eclipse.mdm.api.base.model.EnumRegistry;
+import org.eclipse.mdm.api.base.model.EnumerationValue;
+import org.eclipse.mdm.api.base.model.Enumeration;
 import org.eclipse.mdm.api.base.model.ScalarType;
 import org.eclipse.mdm.api.base.model.Sortable;
 import org.eclipse.mdm.api.base.model.Unit;
@@ -34,7 +37,7 @@
  * @see CatalogComponent
  * @see CatalogSensor
  */
-public final class CatalogAttribute extends BaseEntity implements Deletable, Describable, Sortable {
+public class CatalogAttribute extends BaseEntity implements Deletable, Describable, Sortable {
 
 	// ======================================================================
 	// Class variables
@@ -219,7 +222,7 @@
 	 *
 	 * @return The {@code ValueType} is returned.
 	 */
-	public ValueType getValueType() {
+	public ValueType<?> getValueType() {
 		ScalarType scalarType = scalarTypeValue.extract();
 		Boolean sequence = sequenceValue.extract();
 		return sequence.booleanValue() ? scalarType.toValueType() : scalarType.toSingleValueType();
@@ -235,17 +238,13 @@
 	 *             {@code true} when {@link ValueType#isEnumerationType()} is
 	 *             called.
 	 */
-	@SuppressWarnings("unchecked")
-	public Class<? extends Enum<?>> getEnumerationClass() {
+	@SuppressWarnings("rawtypes")
+	public Enumeration getEnumerationObject() {
 		if (!getValueType().isEnumerationType()) {
 			throw new IllegalStateException("Catalog attribute is not of type enumeration.");
 		}
 
-		try {
-			return (Class<? extends Enum<?>>) Class.forName(enumerationClassValue.extract());
-		} catch (ClassNotFoundException e) {
-			throw new IllegalStateException("Unable to load enum class due to: " + e.getMessage(), e);
-		}
+		return EnumRegistry.getInstance().get(enumerationClassValue.extract(ValueType.ENUMERATION).name());
 	}
 
 	/**
@@ -277,7 +276,7 @@
 		ScalarType scalarType = scalarTypeValue.extract();
 		sb.append("ScalarType = ").append(scalarType);
 		if (scalarType.isEnumeration()) {
-			sb.append(", EnumerationClass = ").append(getEnumerationClass());
+			sb.append(", EnumerationObject = ").append(getEnumerationObject());
 		}
 
 		sb.append(", Sequence = ").append((boolean) sequenceValue.extract());
@@ -302,20 +301,21 @@
 	 * @param valueType
 	 *            The {@link ValueType}.
 	 */
-	void setValueType(ValueType valueType) {
-		scalarTypeValue.set(ScalarType.valueOf(valueType.toSingleType().name()));
+	void setValueType(ValueType<?> valueType) {
+		Enumeration<?> scalarTypeEnum = EnumRegistry.getInstance().get(EnumRegistry.SCALAR_TYPE);
+		scalarTypeValue.set(scalarTypeEnum.valueOf(valueType.toSingleType().name()));
 		sequenceValue.set(valueType.isSequence());
 	}
 
 	/**
 	 * Sets enumeration class of this catalog attribute.
 	 *
-	 * @param enumerationClass
+	 * @param enumerationValueClass
 	 *            The enumeration class.
 	 */
-	void setEnumerationClass(Class<? extends Enum<?>> enumerationClass) {
+	void setEnumerationValueClass(Class<? extends EnumerationValue> enumerationValueClass) {
 		setValueType(ValueType.ENUMERATION);
-		enumerationClassValue.set(enumerationClass.getName());
+		enumerationClassValue.set(enumerationValueClass.getName());
 	}
 
 }
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogComponent.java b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogComponent.java
index 2a13137..7a3e89d 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogComponent.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogComponent.java
@@ -37,7 +37,7 @@
  * @see CatalogAttribute
  * @see CatalogSensor
  */
-public final class CatalogComponent extends BaseEntity implements Datable, Deletable, Describable {
+public class CatalogComponent extends BaseEntity implements Datable, Deletable, Describable {
 
 	// ======================================================================
 	// Instance variables
@@ -91,7 +91,7 @@
 	 *         given name does not exist.
 	 */
 	public Optional<CatalogAttribute> getCatalogAttribute(String name) {
-		return getCatalogAttributes().stream().filter(ca -> ca.nameMatches(name)).findAny();
+		return getCatalogAttributes().stream().filter(ca -> ca.nameEquals(name)).findAny();
 	}
 
 	/**
@@ -131,7 +131,7 @@
 	 *         given name does not exist.
 	 */
 	public Optional<CatalogSensor> getCatalogSensor(String name) {
-		return getCatalogSensors().stream().filter(cs -> cs.nameMatches(name)).findAny();
+		return getCatalogSensors().stream().filter(cs -> cs.nameEquals(name)).findAny();
 	}
 
 	/**
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogSensor.java b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogSensor.java
index 69a6efa..377913a 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogSensor.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogSensor.java
@@ -35,7 +35,7 @@
  * @see CatalogComponent
  * @see CatalogComponent
  */
-public final class CatalogSensor extends BaseEntity implements Datable, Deletable, Describable {
+public class CatalogSensor extends BaseEntity implements Datable, Deletable, Describable {
 
 	// ======================================================================
 	// Constructors
@@ -73,7 +73,7 @@
 	 *         given name does not exist.
 	 */
 	public Optional<CatalogAttribute> getCatalogAttribute(String name) {
-		return getCatalogAttributes().stream().filter(ca -> ca.nameMatches(name)).findAny();
+		return getCatalogAttributes().stream().filter(ca -> ca.nameEquals(name)).findAny();
 	}
 
 	/**
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/EntityFactory.java b/src/main/java/org/eclipse/mdm/api/dflt/model/EntityFactory.java
index 928efce..4f5a0b2 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/EntityFactory.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/EntityFactory.java
@@ -23,6 +23,7 @@
 import org.eclipse.mdm.api.base.model.ContextType;

 import org.eclipse.mdm.api.base.model.Core;

 import org.eclipse.mdm.api.base.model.Entity;

+import org.eclipse.mdm.api.base.model.EnumerationValue;

 import org.eclipse.mdm.api.base.model.Measurement;

 import org.eclipse.mdm.api.base.model.ScalarType;

 import org.eclipse.mdm.api.base.model.Test;

@@ -262,6 +263,8 @@
 			templateSensor.get().getTemplateAttributes().forEach(ta -> {

 				contextSensor.getValue(ta.getName()).set(ta.getDefaultValue().extract());

 			});

+			

+			return contextSensor;

 		}

 

 		throw new IllegalArgumentException("Template sensor with name '" + name + "' does not exist.");

@@ -338,7 +341,7 @@
 	 *             Thrown if given name is already in use or not allowed or

 	 *             given {@code ValueType} is not supported.

 	 */

-	public CatalogAttribute createCatalogAttribute(String name, ValueType valueType,

+	public CatalogAttribute createCatalogAttribute(String name, ValueType<?> valueType,

 			CatalogComponent catalogComponent) {

 		validateCatalogName(name, true);

 

@@ -370,7 +373,7 @@
 	 *

 	 * @param name

 	 *            Name of the created {@code CatalogAttribute}.

-	 * @param enumerationClass

+	 * @param enumerationValueClass

 	 *            The enumeration class.

 	 * @param catalogComponent

 	 *            The parent {@code CatalogComponent}.

@@ -379,10 +382,10 @@
 	 *             Thrown if given name is already in use or not allowed or

 	 *             given enumeration class is not supported.

 	 */

-	public CatalogAttribute createCatalogAttribute(String name, Class<? extends Enum<?>> enumerationClass,

+	public CatalogAttribute createCatalogAttribute(String name, Class<? extends EnumerationValue> enumerationValueClass,

 			CatalogComponent catalogComponent) {

 		validateCatalogName(name, true);

-		validateEnum(enumerationClass);

+		validateEnum(enumerationValueClass);

 		if (catalogComponent.getCatalogAttribute(name).isPresent()) {

 			throw new IllegalArgumentException("Catalog attribute with name '" + name + "' already exists.");

 		}

@@ -396,7 +399,7 @@
 

 		// properties

 		catalogAttribute.setName(name);

-		catalogAttribute.setEnumerationClass(enumerationClass);

+		catalogAttribute.setEnumerationValueClass(enumerationValueClass);

 		catalogAttribute.setSortIndex(nextIndex(catalogComponent.getCatalogAttributes()));

 

 		return catalogAttribute;

@@ -955,7 +958,7 @@
 	 * @throws IllegalArgumentException

 	 *             Thrown if given enumeration class is not supported.

 	 */

-	protected abstract void validateEnum(Class<? extends Enum<?>> enumClass);

+	protected abstract void validateEnum(Class<? extends EnumerationValue> enumClass);

 

 	// ======================================================================

 	// Private methods

diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/Pool.java b/src/main/java/org/eclipse/mdm/api/dflt/model/Pool.java
index 048fd41..1b9e4ad 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/Pool.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/Pool.java
@@ -16,7 +16,7 @@
  * @see Project
  * @see Test
  */
-public final class Pool extends BaseEntity implements Deletable {
+public class Pool extends BaseEntity implements Deletable {
 
 	// ======================================================================
 	// Class variables
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/Project.java b/src/main/java/org/eclipse/mdm/api/dflt/model/Project.java
index 506b487..b338d88 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/Project.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/Project.java
@@ -13,7 +13,7 @@
  * @author Viktor Stoehr, Gigatronik Ingolstadt GmbH
  * @see Pool
  */
-public final class Project extends BaseEntity implements Deletable {
+public class Project extends BaseEntity implements Deletable {
 
 	// ======================================================================
 	// Class variables
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/Status.java b/src/main/java/org/eclipse/mdm/api/dflt/model/Status.java
index 43c1d8f..cd96a42 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/Status.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/Status.java
@@ -26,7 +26,7 @@
  * @since 1.0.0
  * @author Viktor Stoehr, Gigatronik Ingolstadt GmbH
  */
-public final class Status extends BaseEntity implements Describable {
+public class Status extends BaseEntity implements Describable {
 
 	// ======================================================================
 	// Constructors
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateAttribute.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateAttribute.java
index 4adc3b2..caa4b85 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateAttribute.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateAttribute.java
@@ -27,6 +27,7 @@
 import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.DoubleComplex;
+import org.eclipse.mdm.api.base.model.Enumeration;
 import org.eclipse.mdm.api.base.model.FileLink;
 import org.eclipse.mdm.api.base.model.FloatComplex;
 import org.eclipse.mdm.api.base.model.MimeType;
@@ -45,7 +46,7 @@
  * @see TemplateComponent
  * @see TemplateSensor
  */
-public final class TemplateAttribute extends BaseEntity implements Deletable {
+public class TemplateAttribute extends BaseEntity implements Deletable {
 
 	// ======================================================================
 	// Class variables
@@ -96,15 +97,15 @@
 	 *
 	 * @return The default {@code Value} is returned.
 	 */
-	@SuppressWarnings({ "unchecked", "rawtypes" })
+	@SuppressWarnings({ "rawtypes" })
 	public Value getDefaultValue() {
 		ValueType valueType = getCatalogAttribute().getValueType();
 		Value defaultValue = getValue(ATTR_DEFAULT_VALUE);
 		boolean isValid = defaultValue.isValid();
 		String value = defaultValue.extract();
 		if (valueType.isEnumerationType()) {
-			Class<? extends Enum> enumClass = getCatalogAttribute().getEnumerationClass();
-			return valueType.create(enumClass, getName(), "", isValid, isValid ? Enum.valueOf(enumClass, value) : null);
+			Enumeration enumObject = getCatalogAttribute().getEnumerationObject();
+			return valueType.create(getName(), "", isValid, isValid ? enumObject.valueOf(value) : null, enumObject.getName());
 		} else {
 			return valueType.create(getName(), isValid ? parse(value, valueType) : null);
 		}
@@ -123,7 +124,7 @@
 			return;
 		}
 
-		ValueType valueType = getCatalogAttribute().getValueType();
+		ValueType<?> valueType = getCatalogAttribute().getValueType();
 		boolean sequence = valueType.isSequence();
 
 		// if this passes -> input is valid
@@ -270,7 +271,7 @@
 	 *            Used to resolve the corresponding converter.
 	 * @return The parsed object is returned.
 	 */
-	private static Object parse(String value, ValueType valueType) {
+	private static Object parse(String value, ValueType<?> valueType) {
 		if (valueType.isFileLinkType()) {
 			Pattern pattern = Pattern.compile("([^,].*?)\\[(.*?),(.*?)\\]");
 			Matcher matcher = pattern.matcher(value);
@@ -309,7 +310,7 @@
 	 * @throws IllegalArgumentException
 	 *             Thrown if a corresponding {@code String} is not supported.
 	 */
-	private static Function<String, Object> getParser(ValueType valueType) {
+	private static Function<String, Object> getParser(ValueType<?> valueType) {
 		Function<String, Object> converter;
 
 		if (valueType.isString()) {
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateComponent.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateComponent.java
index 718f55a..189917b 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateComponent.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateComponent.java
@@ -41,7 +41,7 @@
  * @see TemplateAttribute
  * @see TemplateSensor
  */
-public final class TemplateComponent extends BaseEntity implements Deletable, Sortable {
+public class TemplateComponent extends BaseEntity implements Deletable, Sortable {
 
 	// ======================================================================
 	// Class variables
@@ -221,7 +221,7 @@
 	 *         given name does not exist.
 	 */
 	public Optional<TemplateAttribute> getTemplateAttribute(String name) {
-		return getTemplateAttributes().stream().filter(ta -> ta.nameMatches(name)).findAny();
+		return getTemplateAttributes().stream().filter(ta -> ta.nameEquals(name)).findAny();
 	}
 
 	/**
@@ -270,7 +270,7 @@
 	 */
 	public Optional<TemplateComponent> getTemplateComponent(String name) {
 		List<TemplateComponent> templateComponents = getTemplateComponents();
-		Optional<TemplateComponent> templateComponent = templateComponents.stream().filter(tc -> tc.nameMatches(name))
+		Optional<TemplateComponent> templateComponent = templateComponents.stream().filter(tc -> tc.nameEquals(name))
 				.findAny();
 		if (templateComponent.isPresent()) {
 			return templateComponent;
@@ -329,7 +329,7 @@
 	 *         given name does not exist.
 	 */
 	public Optional<TemplateSensor> getTemplateSensor(String name) {
-		return getTemplateSensors().stream().filter(ts -> ts.nameMatches(name)).findAny();
+		return getTemplateSensors().stream().filter(ts -> ts.nameEquals(name)).findAny();
 	}
 
 	/**
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateRoot.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateRoot.java
index 20a5b2a..cc980f7 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateRoot.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateRoot.java
@@ -39,7 +39,7 @@
  * @see TemplateComponent
  * @see Versionable
  */
-public final class TemplateRoot extends BaseEntity implements Deletable, Versionable {
+public class TemplateRoot extends BaseEntity implements Deletable, Versionable {
 
 	// ======================================================================
 	// Instance variables
@@ -102,7 +102,7 @@
 	 */
 	public Optional<TemplateComponent> getTemplateComponent(String name) {
 		List<TemplateComponent> templateComponents = getTemplateComponents();
-		Optional<TemplateComponent> templateComponent = templateComponents.stream().filter(tc -> tc.nameMatches(name))
+		Optional<TemplateComponent> templateComponent = templateComponents.stream().filter(tc -> tc.nameEquals(name))
 				.findAny();
 		if (templateComponent.isPresent()) {
 			return templateComponent;
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateSensor.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateSensor.java
index 862470c..330725c 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateSensor.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateSensor.java
@@ -39,7 +39,7 @@
  * @see TemplateComponent
  * @see TemplateAttribute
  */
-public final class TemplateSensor extends BaseEntity implements Deletable, Describable, Sortable {
+public class TemplateSensor extends BaseEntity implements Deletable, Describable, Sortable {
 
 	// ======================================================================
 	// Class variables
@@ -279,7 +279,7 @@
 	 *         given name does not exist.
 	 */
 	public Optional<TemplateAttribute> getTemplateAttribute(String name) {
-		return getTemplateAttributes().stream().filter(ta -> ta.nameMatches(name)).findAny();
+		return getTemplateAttributes().stream().filter(ta -> ta.nameEquals(name)).findAny();
 	}
 
 	/**
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTest.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTest.java
index f944497..0a98273 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTest.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTest.java
@@ -38,7 +38,7 @@
  * @see TemplateTestStepUsage
  * @see Versionable
  */
-public final class TemplateTest extends BaseEntity implements Deletable, Describable, Versionable {
+public class TemplateTest extends BaseEntity implements Deletable, Describable, Versionable {
 
 	// ======================================================================
 	// Class variables
@@ -143,7 +143,7 @@
 	 *         with given name does not exist.
 	 */
 	public Optional<TemplateTestStepUsage> getTemplateTestStepUsage(String name) {
-		return getTemplateTestStepUsages().stream().filter(ttsu -> ttsu.nameMatches(name)).findAny();
+		return getTemplateTestStepUsages().stream().filter(ttsu -> ttsu.nameEquals(name)).findAny();
 	}
 
 	/**
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStep.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStep.java
index 41a9b2f..d70879f 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStep.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStep.java
@@ -37,7 +37,7 @@
  * @see TemplateRoot
  * @see Versionable
  */
-public final class TemplateTestStep extends BaseEntity implements Deletable, Describable, Versionable {
+public class TemplateTestStep extends BaseEntity implements Deletable, Describable, Versionable {
 
 	// ======================================================================
 	// Constructors
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStepUsage.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStepUsage.java
index fa5812c..e01a99d 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStepUsage.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStepUsage.java
@@ -26,7 +26,7 @@
  * @see TemplateTest
  * @see TemplateTestStep
  */
-public final class TemplateTestStepUsage extends BaseEntity implements Deletable, Sortable {
+public class TemplateTestStepUsage extends BaseEntity implements Deletable, Sortable {
 
 	// ======================================================================
 	// Class variables
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/ValueList.java b/src/main/java/org/eclipse/mdm/api/dflt/model/ValueList.java
index 581fa59..64f538a 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/ValueList.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/ValueList.java
@@ -29,7 +29,7 @@
  * @see ValueListValue
  * @see CatalogAttribute
  */
-public final class ValueList extends BaseEntity implements Datable, Describable, Deletable {
+public class ValueList extends BaseEntity implements Datable, Describable, Deletable {
 
 	// ======================================================================
 	// Constructors
@@ -58,7 +58,7 @@
 	 *         given name does not exist.
 	 */
 	public Optional<ValueListValue> getValueListValue(String name) {
-		return getValueListValues().stream().filter(vlv -> vlv.nameMatches(name)).findAny();
+		return getValueListValues().stream().filter(vlv -> vlv.nameEquals(name)).findAny();
 	}
 
 	/**
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/ValueListValue.java b/src/main/java/org/eclipse/mdm/api/dflt/model/ValueListValue.java
index 746acd7..9102bf2 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/ValueListValue.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/ValueListValue.java
@@ -23,7 +23,7 @@
  * @author Viktor Stoehr, Gigatronik Ingolstadt GmbH
  * @see ValueList
  */
-public final class ValueListValue extends BaseEntity implements Deletable, Describable, Sortable {
+public class ValueListValue extends BaseEntity implements Deletable, Describable, Sortable {
 
 	// ======================================================================
 	// Class variables