diff --git a/src/main/java/org/openepics/names/rest/api/v1/IStructures.java b/src/main/java/org/openepics/names/rest/api/v1/IStructures.java
index c28d0976ebae595aed72a4c0b4cdff2b8b90f99b..90716303307604dff801266966147ffec096d37d 100644
--- a/src/main/java/org/openepics/names/rest/api/v1/IStructures.java
+++ b/src/main/java/org/openepics/names/rest/api/v1/IStructures.java
@@ -95,7 +95,7 @@ public interface IStructures {
            read      GET    /structures/history/{uuid}                        - readStructuresHistory          (String, Type, FieldStructure, Boolean, Integer, Integer)
            ----------------------------------------------------------------------------------------------------
            read      GET    /structures/equivalence/{mnemonic}                - equivalenceMnemonic            (String)
-           read      GET    /structures/exists/{type}/{mnemonic}              - existsStructure                (Type, String)
+           read      GET    /structures/exists/{type}/{mnemonicpath}          - existsStructure                (Type, String)
            read      GET    /structures/isvalidtocreate/{type}/{mnemonicpath} - isValidToCreateStructure       (Type, String)
            ----------------------------------------------------------------------------------------------------
            read      GET    /structures/validatecreate                        - validateStructuresCreate       (List<StructureElement>)
@@ -364,7 +364,7 @@ public interface IStructures {
             @Parameter(in = ParameterIn.PATH, description = "mnemonic to get mnemonic equivalence for") @PathVariable("mnemonic") String mnemonic);
 
     /**
-     * Return if mnemonic exists in structure (exact match).
+     * Return if mnemonic path exists in structure (exact match).
      *
      * <p>
      * Returned object has three fields (response, message, details).
@@ -376,25 +376,25 @@ public interface IStructures {
      * </p>
      *
      * @param type type of structure to search in
-     * @param mnemonic mnemonic to find structure for
-     * @return if mnemonic exists in structure
+     * @param mnemonicpath mnemonic path to find structure for
+     * @return if mnemonic path exists in structure
      */
     @Operation(
-            summary     = "Return if mnemonic exists in structure (exact match)",
-            description = "Return if mnemonic exists in structure (exact match). "
+            summary     = "Return if mnemonic path exists in structure (exact match)",
+            description = "Return if mnemonic path exists in structure (exact match). "
                         + "Returned object has three fields (message, details, response)."
     )
     @ApiResponses(value = {
-            @ApiResponse(responseCode = "200", description = "Method completed OK. Response is true if name exists, false otherwise. Message and details are available if no response is available.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseBoolean.class))),
+            @ApiResponse(responseCode = "200", description = "Method completed OK. Response is true if mnemonic path exists, false otherwise. Message and details are available if no response is available.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseBoolean.class))),
             @ApiResponse(responseCode = "400", description = "Bad request. Message and details are available.",            content = @Content(mediaType = "application/json", schema = @Schema(implementation = Response.class))),
             @ApiResponse(responseCode = "500", description = "Internal server error. Message and details are available.",  content = @Content(mediaType = "application/json", schema = @Schema(implementation = Response.class)))
     })
     @RequestMapping(
-            value = "/exists/{type}/{mnemonic}",
+            value = "/exists/{type}/{mnemonicpath}",
             method = RequestMethod.GET)
     public ResponseEntity<ResponseBoolean> existsStructure(
             @Parameter(in = ParameterIn.PATH,  description = "type of structure to search in") @PathVariable("type") Type type,
-            @Parameter(in = ParameterIn.PATH,  description = "mnemonic to find structure for") @PathVariable("mnemonic") String mnemonic);
+            @Parameter(in = ParameterIn.PATH,  description = "mnemonic path to find structure for") @PathVariable("mnemonicpath") String mnemonicpath);
 
     /**
      * Return if mnemonic path is valid to create in structure (exact match).
diff --git a/src/main/java/org/openepics/names/rest/controller/StructuresController.java b/src/main/java/org/openepics/names/rest/controller/StructuresController.java
index e9358465a40a98ca3df9cce59c51ce56d3fe9e96..9327b503fc6a8fc81488e5e18bc3f9dfa9484c1c 100644
--- a/src/main/java/org/openepics/names/rest/controller/StructuresController.java
+++ b/src/main/java/org/openepics/names/rest/controller/StructuresController.java
@@ -204,9 +204,9 @@ public class StructuresController implements IStructures {
     }
 
     @Override
-    public ResponseEntity<ResponseBoolean> existsStructure(Type type, String mnemonic) {
+    public ResponseEntity<ResponseBoolean> existsStructure(Type type, String mnemonicpath) {
         try {
-            return new ResponseEntity<>(new ResponseBoolean(structuresService.existsStructure(type, mnemonic)), Response.HEADER_JSON, HttpStatus.OK);
+            return new ResponseEntity<>(new ResponseBoolean(structuresService.existsStructure(type, mnemonicpath)), Response.HEADER_JSON, HttpStatus.OK);
         } catch (ServiceHttpStatusException e) {
             LogUtil.logServiceHttpStatusException(LOGGER, Level.SEVERE, e);
             LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
diff --git a/src/main/java/org/openepics/names/service/StructuresService.java b/src/main/java/org/openepics/names/service/StructuresService.java
index 1c8a2c65821c9c59f2c67ee013d35b152c5c35d1..0b3abf602982601ba6172c308d2bb73d83c135ac 100644
--- a/src/main/java/org/openepics/names/service/StructuresService.java
+++ b/src/main/java/org/openepics/names/service/StructuresService.java
@@ -398,15 +398,15 @@ public class StructuresService {
 
         // do
         if (Type.SYSTEMGROUP.equals(type)) {
-        	return readStructures(Type.SYSTEM, new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT}, new String[] {uuid}, orderBy, isAsc, offset, limit);
+            return readStructures(Type.SYSTEM, new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT}, new String[] {uuid}, orderBy, isAsc, offset, limit);
         } else if (Type.SYSTEM.equals(type)) {
-        	return readStructures(Type.SUBSYSTEM, new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT}, new String[] {uuid}, orderBy, isAsc, offset, limit);
+            return readStructures(Type.SUBSYSTEM, new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT}, new String[] {uuid}, orderBy, isAsc, offset, limit);
         } else if (Type.SUBSYSTEM.equals(type)) {
             // no children in structures
         } else if (Type.DISCIPLINE.equals(type)) {
-        	return readStructures(Type.DEVICEGROUP, new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT}, new String[] {uuid}, orderBy, isAsc, offset, limit);
+            return readStructures(Type.DEVICEGROUP, new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT}, new String[] {uuid}, orderBy, isAsc, offset, limit);
         } else if (Type.DEVICEGROUP.equals(type)) {
-        	return readStructures(Type.DEVICETYPE, new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT}, new String[] {uuid}, orderBy, isAsc, offset, limit);
+            return readStructures(Type.DEVICETYPE, new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT}, new String[] {uuid}, orderBy, isAsc, offset, limit);
         } else if (Type.DEVICETYPE.equals(type)) {
             // no children in structures
         }
@@ -417,7 +417,7 @@ public class StructuresService {
         response.setPage(offset);
         response.setPageSize(limit);
 
-    	return new ResponsePageStructureElements();
+        return new ResponsePageStructureElements();
     }
 
     public ResponsePageStructureElements readStructuresMnemonic(
@@ -545,7 +545,7 @@ public class StructuresService {
             }
         } else {
             // go through all structures and see if / where uuid is found
-        	//     uuid in 0 or 1 of structures
+            //     uuid in 0 or 1 of structures
 
             ResponsePageStructureElements responseSystemGroup = readStructures(Type.SYSTEMGROUP, null, null, new FieldStructure[] {FieldStructure.UUID}, new String[] {uuid}, Boolean.TRUE, orderBy, isAsc, offset, limit, StructureChoice.HISTORY);
             ResponsePageStructureElements responseSystem      = readStructures(Type.SYSTEM,      null, null, new FieldStructure[] {FieldStructure.UUID}, new String[] {uuid}, Boolean.TRUE, orderBy, isAsc, offset, limit, StructureChoice.HISTORY);
@@ -590,33 +590,33 @@ public class StructuresService {
         return namingConvention.equivalenceClassRepresentative(mnemonic);
     }
 
-    public Boolean existsStructure(Type type, String mnemonic) {
+    public Boolean existsStructure(Type type, String mnemonicpath) {
         // validate input
         // do
         //     exists
 
         // validate input
         ValidateUtil.validateInputType(type);
-        ValidateUtil.validateInputMnemonic(mnemonic);
+        ValidateUtil.validateInputMnemonicpath(mnemonicpath);
 
         // do
         if (Type.SYSTEMGROUP.equals(type)) {
-            List<SystemGroup> systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, FieldStructure.MNEMONIC, mnemonic);
+            List<SystemGroup> systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, FieldStructure.MNEMONICPATH, mnemonicpath);
             return !systemGroups.isEmpty();
         } else if (Type.SYSTEM.equals(type)) {
-            List<System> systems = holderRepositories.getSystemRepository().readSystems(Status.APPROVED, false, FieldStructure.MNEMONIC, mnemonic);
+            List<System> systems = holderRepositories.getSystemRepository().readSystems(Status.APPROVED, false, FieldStructure.MNEMONICPATH, mnemonicpath);
             return !systems.isEmpty();
         } else if (Type.SUBSYSTEM.equals(type)) {
-            List<Subsystem> subsystems = holderRepositories.getSubsystemRepository().readSubsystems(Status.APPROVED, false, FieldStructure.MNEMONIC, mnemonic);
+            List<Subsystem> subsystems = holderRepositories.getSubsystemRepository().readSubsystems(Status.APPROVED, false, FieldStructure.MNEMONICPATH, mnemonicpath);
             return !subsystems.isEmpty();
         } else if (Type.DISCIPLINE.equals(type)) {
-            List<Discipline> disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.MNEMONIC, mnemonic);
+            List<Discipline> disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.MNEMONICPATH, mnemonicpath);
             return !disciplines.isEmpty();
         } else if (Type.DEVICEGROUP.equals(type)) {
-            List<DeviceGroup> deviceGroups = holderRepositories.getDeviceGroupRepository().readDeviceGroups(Status.APPROVED, false, FieldStructure.MNEMONIC, mnemonic);
+            List<DeviceGroup> deviceGroups = holderRepositories.getDeviceGroupRepository().readDeviceGroups(Status.APPROVED, false, FieldStructure.MNEMONICPATH, mnemonicpath);
             return !deviceGroups.isEmpty();
         } else if (Type.DEVICETYPE.equals(type)) {
-            List<DeviceType> deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(Status.APPROVED, false, FieldStructure.MNEMONIC, mnemonic);
+            List<DeviceType> deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(Status.APPROVED, false, FieldStructure.MNEMONICPATH, mnemonicpath);
             return !deviceTypes.isEmpty();
         }
 
diff --git a/src/main/java/org/openepics/names/util/StructureUtil.java b/src/main/java/org/openepics/names/util/StructureUtil.java
index 354d0e425a65eb55273062e551f17de82330ce89..1e226acd09c69e412976803ecdebfaf314d3ed1d 100644
--- a/src/main/java/org/openepics/names/util/StructureUtil.java
+++ b/src/main/java/org/openepics/names/util/StructureUtil.java
@@ -188,12 +188,7 @@ public class StructureUtil {
         List<String> mnemonicPaths = new ArrayList<>();
         String value = null;
         for (Entry<UUID, System> entry : holder.getUuidSystems().entrySet()) {
-            SystemGroup systemGroup = holder.findSystemGroupByUuid(entry.getValue().getParentUuid());
-            if (!StringUtils.isEmpty(systemGroup.getMnemonic())) {
-                value = systemGroup.getMnemonic() + "-" + entry.getValue().getMnemonic();
-            } else {
-                value = entry.getValue().getMnemonic();
-            }
+            value = entry.getValue().getMnemonic();
 
             if (mnemonicEquivalence) {
                 mnemonicPaths.add(namingConvention.equivalenceClassRepresentative(value));
@@ -217,12 +212,7 @@ public class StructureUtil {
         String value = null;
         for (Entry<UUID, Subsystem> entry : holder.getUuidSubsystems().entrySet()) {
             System system = holder.findSystemByUuid(entry.getValue().getParentUuid());
-            SystemGroup systemGroup = holder.findSystemGroupByUuid(system.getParentUuid());
-            if (!StringUtils.isEmpty(systemGroup.getMnemonic())) {
-                value = systemGroup.getMnemonic() + "-" + system.getMnemonic() + "-" + entry.getValue().getMnemonic();
-            } else {
-                value = system.getMnemonic() + "-" + entry.getValue().getMnemonic();
-            }
+            value = system.getMnemonic() + "-" + entry.getValue().getMnemonic();
 
             if (mnemonicEquivalence) {
                 mnemonicPaths.add(namingConvention.equivalenceClassRepresentative(value));
diff --git a/src/main/java/org/openepics/names/util/ValidateUtil.java b/src/main/java/org/openepics/names/util/ValidateUtil.java
index 4291100a1628cb03ec652eb6f980be38b2f9a1a4..c3c2f7d89ace7dad0c84656f0df24508e4b55b3d 100644
--- a/src/main/java/org/openepics/names/util/ValidateUtil.java
+++ b/src/main/java/org/openepics/names/util/ValidateUtil.java
@@ -1333,8 +1333,9 @@ public class ValidateUtil {
         }
 
         String[] path = NamingConventionUtil.string2MnemonicPath(mnemonicpath);
-        validateCondition(path != null && path.length >= 1 && path.length <= 3,
+        validateCondition(path != null && path.length >= 1 && path.length <= 2,
                 HttpStatus.BAD_REQUEST, ValidateUtil.STRUCTURE + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path + ", " + mnemonicpath);
+        String mnemonicpathEquivalence = namingConvention.equivalenceClassRepresentative(mnemonicpath);
 
         if (Type.SYSTEMGROUP.equals(type)) {
             validateCondition(path.length == 1, HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEMGROUP + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath);
@@ -1351,60 +1352,61 @@ public class ValidateUtil {
                 validateCondition(!StringUtils.equals(systemGroup.getMnemonicEquivalence(), namingConvention.equivalenceClassRepresentative(path[0])), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEMGROUP + " mnemonic path equivalence duplicate", path[0] + ", " + mnemonicpath);
             }
         } else if (Type.SYSTEM.equals(type)) {
-            validateCondition(path.length == 1 || path.length == 2, HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath);
+            validateCondition(path.length == 1, HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath);
 
-            // path with 2 elements - system group and system ---> check both as pair
             // path with 1 element  - system group or  system ---> check both individually
             // check mnemonic, mnemonic equivalence
 
-            // mnemonic
-            if (path.length == 2) {
-                validateCondition(!StringUtils.equals(path[0], path[1]), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
+            // mnemonic system group
+            List<String> mnemonicPaths = StructureUtil.getMnemonicPathsSystemGroup(holder, false, namingConvention);
+            for (String existingPath : mnemonicPaths) {
+                validateCondition(!StringUtils.equals(mnemonicpath, existingPath), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
+            }
+
+            // mnemonic path system group
+            mnemonicPaths = StructureUtil.getMnemonicPathsSystemGroup(holder, true, namingConvention);
+            for (String existingPath : mnemonicPaths) {
+                validateCondition(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path equivalence duplicate", mnemonicpath);
             }
-            List<String> mnemonicPaths = StructureUtil.getMnemonicPathsSystem(holder, false, namingConvention);
+
+            // mnemonic
+            mnemonicPaths = StructureUtil.getMnemonicPathsSystem(holder, false, namingConvention);
             for (String existingPath : mnemonicPaths) {
                 validateCondition(!StringUtils.equals(mnemonicpath, existingPath), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
             }
 
             // mnemonic equivalence
-            if (path.length == 2) {
-                validateCondition(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
-            }
-            String mnemonicpathEquivalence = namingConvention.equivalenceClassRepresentative(mnemonicpath);
             mnemonicPaths = StructureUtil.getMnemonicPathsSystem(holder, true, namingConvention);
             for (String existingPath : mnemonicPaths) {
                 validateCondition(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path equivalence duplicate", mnemonicpath);
             }
         } else if (Type.SUBSYSTEM.equals(type)) {
-            validateCondition(path.length == 2 || path.length == 3, HttpStatus.BAD_REQUEST, ValidateUtil.SUBSYSTEM + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath);
+            validateCondition(path.length == 2, HttpStatus.BAD_REQUEST, ValidateUtil.SUBSYSTEM + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath);
+
+            System sys = holderIRepositories.getSystemRepository().findLatestNotDeletedByMnemonic(path[0]);
+            ValidateUtil.validateCondition(sys != null, HttpStatus.BAD_REQUEST, ValidateUtil.SUBSYSTEM + " mnemonic path not available", path[0] + ", " + mnemonicpath);
+            SystemGroup sg = holderIRepositories.getSystemGroupRepository().findLatestNotDeletedByUuid(sys.getParentUuid().toString());
 
             // mnemonic
-            if (path.length == 3) {
-                throw ExceptionUtil.createServiceHttpStatusExceptionBadRequest(ValidateUtil.SUBSYSTEM + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
-            } else if (path.length == 2) {
-                validateCondition(!StringUtils.equals(path[0], path[1]), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
-            } else {
-                validateCondition(!StringUtils.equals(path[0], path[1]), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
-                validateCondition(!StringUtils.equals(path[0], path[2]), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
-                validateCondition(!StringUtils.equals(path[1], path[2]), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
+            validateCondition(!StringUtils.equals(path[0], path[1]), HttpStatus.BAD_REQUEST, ValidateUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath);
+            if (!StringUtils.isEmpty(sg.getMnemonic())) {
+                validateCondition(!StringUtils.equals(sg.getMnemonic(), path[1]), HttpStatus.BAD_REQUEST, ValidateUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath);
             }
+
             List<String> mnemonicPaths = StructureUtil.getMnemonicPathsSubsystem(holder, false, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                validateCondition(!StringUtils.equals(mnemonicpath, existingPath), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
+                validateCondition(!StringUtils.equals(mnemonicpath, existingPath), HttpStatus.BAD_REQUEST, ValidateUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath);
             }
 
             // mnemonic equivalence
-            if (path.length == 2) {
-                validateCondition(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
-            } else {
-                validateCondition(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
-                validateCondition(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[2])), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
-                validateCondition(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[1]), namingConvention.equivalenceClassRepresentative(path[2])), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
+            validateCondition(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
+            if (!StringUtils.isEmpty(sg.getMnemonic())) {
+                validateCondition(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(sg.getMnemonic()), namingConvention.equivalenceClassRepresentative(path[1])), HttpStatus.BAD_REQUEST, ValidateUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath);
             }
-            String mnemonicpathEquivalence = namingConvention.equivalenceClassRepresentative(mnemonicpath);
+
             mnemonicPaths = StructureUtil.getMnemonicPathsSubsystem(holder, true, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                validateCondition(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path equivalence duplicate", mnemonicpath);
+                validateCondition(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), HttpStatus.BAD_REQUEST, ValidateUtil.SUBSYSTEM + " mnemonic path equivalence duplicate", mnemonicpath);
             }
         } else if (Type.DISCIPLINE.equals(type)) {
             validateCondition(path.length == 1, HttpStatus.BAD_REQUEST, ValidateUtil.DISCIPLINE + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path[0] + ", " + mnemonicpath);
@@ -1429,19 +1431,27 @@ public class ValidateUtil {
             ValidateUtil.validateCondition(discipline != null, HttpStatus.BAD_REQUEST, ValidateUtil.DISCIPLINE + " " + ValidateUtil.IS_NOT_VALID, path[0] + ", " + mnemonicpath);
 
             // mnemonic
-            if (path.length == 2) {
-                validateCondition(!StringUtils.equals(path[0], path[1]), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
+            validateCondition(!StringUtils.equals(path[0], path[1]), HttpStatus.BAD_REQUEST, ValidateUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath);
+
+            List<String> mnemonicPaths = StructureUtil.getMnemonicPathsDeviceType(holder, false, namingConvention);
+            for (String existingPath : mnemonicPaths) {
+                validateCondition(!StringUtils.equals(mnemonicpath, existingPath), HttpStatus.BAD_REQUEST, ValidateUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath);
             }
 
             // mnemonic equivalence
-            validateCondition(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), HttpStatus.BAD_REQUEST, ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath);
+            validateCondition(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), HttpStatus.BAD_REQUEST, ValidateUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath);
+
+            mnemonicPaths = StructureUtil.getMnemonicPathsDeviceType(holder, true, namingConvention);
+            for (String existingPath : mnemonicPaths) {
+                validateCondition(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), HttpStatus.BAD_REQUEST, ValidateUtil.DEVICETYPE + " mnemonic path equivalence duplicate", mnemonicpath);
+            }
 
             // since device group is between discipline and device type and device group has no mnemonic,
             //     it can not be traced to which device group that this device type belongs,
-            //     therefore it can not be known tO which mnemonic line it belongs
-            // therefore this method considered ok as long as mnemonic not empty and mnemonic not duplicate
-            // this is ensured by path length 2
-            // rest of checks in validatecreate
+            //     therefore it can not be known to which mnemonic line it belongs
+            //     by looking at mnemonic
+            // instead similar approach as for other Type, i.e. compare with list of mnemonic paths
+            //     rest of checks in validatecreate
         }
     }
 
diff --git a/src/test/java/org/openepics/names/docker/ITUtilStructureElement.java b/src/test/java/org/openepics/names/docker/ITUtilStructureElement.java
index 97f7882007c7c270becd43139eace013607c4434..350602c7ce33e868bf0c0ea84bafbb8f80ca637f 100644
--- a/src/test/java/org/openepics/names/docker/ITUtilStructureElement.java
+++ b/src/test/java/org/openepics/names/docker/ITUtilStructureElement.java
@@ -220,27 +220,27 @@ public class ITUtilStructureElement {
      * Utility method to check if structure exists.
      *
      * @param type type
-     * @param mnemonic mnemonic
+     * @param mnemonicpath mnemonic path
      * @param expected expected response
      */
-    public static void assertExists(Type type, String mnemonic, Boolean expected) {
-        assertExists(type, mnemonic, expected, null);
+    public static void assertExists(Type type, String mnemonicpath, Boolean expected) {
+        assertExists(type, mnemonicpath, expected, null);
     }
 
     /**
      * Utility method to check if structure exists.
      *
      * @param type type
-     * @param mnemonic mnemonic
+     * @param mnemonicpath mnemonic path
      * @param expected expected response
      * @param expectedMessageEmpty expected message empty
      */
-    public static void assertExists(Type type, String mnemonic, Boolean expected, Boolean expectedMessageEmpty) {
+    public static void assertExists(Type type, String mnemonicpath, Boolean expected, Boolean expectedMessageEmpty) {
         try {
             ObjectMapper mapper = new ObjectMapper();
             String[] response = null;
 
-            response = ITUtil.doGetJson(ITUtil.HTTP_IP_PORT_NAMING_API_V1_STRUCTURES + "/exists/" + type.toString() + "/" + mnemonic);
+            response = ITUtil.doGetJson(ITUtil.HTTP_IP_PORT_NAMING_API_V1_STRUCTURES + "/exists/" + type.toString() + "/" + mnemonicpath);
             ITUtil.assertResponseLength2CodeOK(response);
             if (expectedMessageEmpty != null) {
                 ITUtil.assertEqualsResponseBoolean(mapper.readValue(response[1], ResponseBoolean.class), expected, expectedMessageEmpty);
diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
index 98d497b4e6a4312fdb9cc94cb2f3f0e1073780a7..34669241748e240a01edcbdea41017390b823688 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
@@ -127,7 +127,9 @@ public class StructuresDeviceGroupIT {
             StructureElement structureElement = new StructureElement();
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Cc", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "CC", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, "Cc", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, "CC", Boolean.FALSE);
 
             ITUtilStructureElement.assertValidate("[{asdf]", StructureChoice.CREATE, HttpURLConnection.HTTP_BAD_REQUEST);
             ITUtilStructureElement.assertCreate("[{asdf]", HttpURLConnection.HTTP_BAD_REQUEST);
@@ -304,6 +306,9 @@ public class StructuresDeviceGroupIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
 
@@ -311,6 +316,9 @@ public class StructuresDeviceGroupIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.TRUE);
 
@@ -318,6 +326,9 @@ public class StructuresDeviceGroupIT {
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
             structureElement = approvedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
         } catch (Exception e) {
@@ -350,6 +361,9 @@ public class StructuresDeviceGroupIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
 
@@ -357,6 +371,9 @@ public class StructuresDeviceGroupIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.TRUE);
 
@@ -364,6 +381,9 @@ public class StructuresDeviceGroupIT {
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
             structureElement = cancelledStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
         } catch (Exception e) {
@@ -396,6 +416,9 @@ public class StructuresDeviceGroupIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
 
@@ -403,6 +426,9 @@ public class StructuresDeviceGroupIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.TRUE);
 
@@ -410,6 +436,9 @@ public class StructuresDeviceGroupIT {
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
             structureElement = rejectedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICEGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
         } catch (Exception e) {
@@ -966,6 +995,8 @@ public class StructuresDeviceGroupIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.TRUE);
+
             // approve
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
 
@@ -991,6 +1022,8 @@ public class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Di-Rsha",  0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1046,6 +1079,8 @@ public class StructuresDeviceGroupIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.TRUE);
+
             // cancel
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
 
@@ -1071,6 +1106,8 @@ public class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Di-Rshc",  0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1126,6 +1163,8 @@ public class StructuresDeviceGroupIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.TRUE);
+
             // reject
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
 
@@ -1151,6 +1190,8 @@ public class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Di-Rshr",  0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1251,6 +1292,12 @@ public class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-P1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-C1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-R1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-A1", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1419,6 +1466,12 @@ public class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9);
+
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-P9", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-C9", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-R9", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-A9", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1809,6 +1862,9 @@ public class StructuresDeviceGroupIT {
 
             ITUtilStructureElement.assertRead("/children/DEVICEGROUP/" + uuid.toString(),           0, 0);
             ITUtilStructureElement.assertRead("/children/DISCIPLINE/" + disciplineUuid.toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di",  Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di2", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
index dec25c60893f47f52213c95f5525203a6d7b5770..22d5449d823dd4b6678002c9fe54079dbbc91823 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
@@ -126,11 +126,22 @@ public class StructuresDeviceTypeIT {
         try {
             StructureElement structureElement = new StructureElement();
 
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "CC", Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Cc", Boolean.FALSE);
-            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "Cc",    Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "Db-Cc", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "Db-CC", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "DB-Cc", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "DB-CC", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "Di-Cc", Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "Di-CC", Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "DI-Cc", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "DI-CC", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "Di-Di", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "Di-DI", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "DI-Di", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "DI-DI", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "Cc",    Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, "CC",    Boolean.FALSE);
 
             ITUtilStructureElement.assertValidate("[{asdf]", StructureChoice.CREATE, HttpURLConnection.HTTP_BAD_REQUEST);
             ITUtilStructureElement.assertCreate("[{asdf]", HttpURLConnection.HTTP_BAD_REQUEST);
@@ -307,6 +318,9 @@ public class StructuresDeviceTypeIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
 
@@ -314,6 +328,9 @@ public class StructuresDeviceTypeIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.TRUE);
 
@@ -321,6 +338,9 @@ public class StructuresDeviceTypeIT {
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
             structureElement = approvedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
         } catch (Exception e) {
@@ -353,6 +373,9 @@ public class StructuresDeviceTypeIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
 
@@ -360,6 +383,9 @@ public class StructuresDeviceTypeIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.TRUE);
 
@@ -367,6 +393,9 @@ public class StructuresDeviceTypeIT {
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
             structureElement = cancelledStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
         } catch (Exception e) {
@@ -399,6 +428,9 @@ public class StructuresDeviceTypeIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
 
@@ -406,6 +438,9 @@ public class StructuresDeviceTypeIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.TRUE);
 
@@ -413,6 +448,9 @@ public class StructuresDeviceTypeIT {
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
             structureElement = rejectedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DEVICETYPE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
         } catch (Exception e) {
@@ -969,6 +1007,9 @@ public class StructuresDeviceTypeIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rsha",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rsha", Boolean.FALSE);
+
             // approve
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
 
@@ -994,6 +1035,9 @@ public class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Di-Rsha",  1, 1);
 
             ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rsha",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rsha", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1049,6 +1093,9 @@ public class StructuresDeviceTypeIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rshc",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rshc", Boolean.FALSE);
+
             // cancel
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
 
@@ -1074,6 +1121,9 @@ public class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Di-Rshc",  0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rshc",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rshc", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1129,6 +1179,9 @@ public class StructuresDeviceTypeIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rshr",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rshr", Boolean.FALSE);
+
             // reject
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
 
@@ -1154,6 +1207,9 @@ public class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Di-Rshr",  0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rshr",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rshr", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1254,6 +1310,15 @@ public class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "P1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "C1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "R1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "A1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-P1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-C1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-R1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-A1", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1422,6 +1487,15 @@ public class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9);
+
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "P9",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "C9",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "R9",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "A9",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-P9", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-C9", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-R9", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-A9", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1813,6 +1887,42 @@ public class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/children/DEVICETYPE/" + uuid.toString(),              0, 0);
             ITUtilStructureElement.assertRead("/children/DEVICEGROUP/" + deviceGroupUuid.toString(), -1, 1);
             ITUtilStructureElement.assertRead("/children/DISCIPLINE/" + disciplineUuid.toString(),   -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AB1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AB2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AB3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AB4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AB5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AC1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AC2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AC3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AC4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AC5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AD1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AD2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AD3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AD4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AD5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AE1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AE2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AE3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AE4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AE5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AF1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AF2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AF3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AF4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AF5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AG1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AG2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AG3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AG4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AG5", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
diff --git a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
index da7701ad7e239b9c1b8b20e5e17c7d753f3b92b2..6a44197f18e003ed3a4f4560fc61d96cad5ffca6 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
@@ -99,7 +99,9 @@ public class StructuresDisciplineIT {
             StructureElement structureElement = new StructureElement();
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Cc", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "CC", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, "Cc", Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, "CC", Boolean.TRUE);
 
             ITUtilStructureElement.assertValidate("[{asdf]", StructureChoice.CREATE, HttpURLConnection.HTTP_BAD_REQUEST);
             ITUtilStructureElement.assertCreate("[{asdf]", HttpURLConnection.HTTP_BAD_REQUEST);
@@ -271,6 +273,9 @@ public class StructuresDisciplineIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
 
@@ -278,6 +283,9 @@ public class StructuresDisciplineIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.TRUE);
 
@@ -285,6 +293,9 @@ public class StructuresDisciplineIT {
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
             structureElement = approvedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
         } catch (Exception e) {
@@ -317,6 +328,9 @@ public class StructuresDisciplineIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
 
@@ -324,6 +338,9 @@ public class StructuresDisciplineIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.TRUE);
 
@@ -331,6 +348,9 @@ public class StructuresDisciplineIT {
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
             structureElement = cancelledStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
         } catch (Exception e) {
@@ -363,6 +383,9 @@ public class StructuresDisciplineIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
 
@@ -370,6 +393,9 @@ public class StructuresDisciplineIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.TRUE);
 
@@ -377,6 +403,9 @@ public class StructuresDisciplineIT {
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
             structureElement = rejectedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.DISCIPLINE, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
         } catch (Exception e) {
@@ -917,6 +946,8 @@ public class StructuresDisciplineIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rsha", Boolean.FALSE);
+
             // approve
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
 
@@ -938,6 +969,8 @@ public class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Rsha", 1, 1);
 
             ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rsha", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -989,6 +1022,8 @@ public class StructuresDisciplineIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rshc", Boolean.FALSE);
+
             // cancel
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
 
@@ -1010,6 +1045,8 @@ public class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Rshc", 0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rshc", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1061,6 +1098,8 @@ public class StructuresDisciplineIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rshr", Boolean.FALSE);
+
             // reject
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
 
@@ -1082,6 +1121,8 @@ public class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Rshr", 0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rshr", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1182,6 +1223,11 @@ public class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1);
+
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "P1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "C1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "R1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "A1", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1350,6 +1396,11 @@ public class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9);
+
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "P9", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "C9", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "R9", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "A9", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1739,6 +1790,42 @@ public class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__",  10, 10);
 
             ITUtilStructureElement.assertRead("/children/DISCIPLINE/" + uuid.toString(), 0, 0);
+
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AB1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AB2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AB3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AB4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AB5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AC1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AC2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AC3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AC4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AC5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AD1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AD2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AD3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AD4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AD5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AE1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AE2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AE3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AE4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AE5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AF1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AF2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AF3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AF4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AF5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AG1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AG2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AG3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AG4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AG5", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
diff --git a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
index 1a6bf3b24205e664a75a27adf93909f898861071..02c0348de3c4e094eb7a9c44ac8b9acbb490f644 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
@@ -131,12 +131,22 @@ public class StructuresSubsystemIT {
             StructureElement structureElement = new StructureElement();
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Cc", Boolean.FALSE);
-            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Cc",         Boolean.FALSE);
-            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sys-Sys",    Boolean.FALSE);
-            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sys-Cc",     Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "CC", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sg-Sys-Sg",  Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sg-Sys-Sys", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sg-Sys-Cc",  Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sg-Cc",      Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sg-CC",      Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sys-Cc",     Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sys-CC",     Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "SYS-Cc",     Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "SYS-CC",     Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sys-Sg",     Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sys-SG",     Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sys-Sys",    Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Sys-SYS",    Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "Cc",         Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, "CC",         Boolean.FALSE);
 
             ITUtilStructureElement.assertValidate("[{asdf]", StructureChoice.CREATE, HttpURLConnection.HTTP_BAD_REQUEST);
             ITUtilStructureElement.assertCreate("[{asdf]", HttpURLConnection.HTTP_BAD_REQUEST);
@@ -313,6 +323,9 @@ public class StructuresSubsystemIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
 
@@ -320,6 +333,9 @@ public class StructuresSubsystemIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.TRUE);
 
@@ -327,6 +343,9 @@ public class StructuresSubsystemIT {
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
             structureElement = approvedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
         } catch (Exception e) {
@@ -359,6 +378,9 @@ public class StructuresSubsystemIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
 
@@ -366,6 +388,9 @@ public class StructuresSubsystemIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.TRUE);
 
@@ -373,6 +398,9 @@ public class StructuresSubsystemIT {
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
             structureElement = cancelledStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
         } catch (Exception e) {
@@ -405,6 +433,9 @@ public class StructuresSubsystemIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
 
@@ -412,6 +443,9 @@ public class StructuresSubsystemIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.TRUE);
 
@@ -419,6 +453,9 @@ public class StructuresSubsystemIT {
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
             structureElement = rejectedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SUBSYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
         } catch (Exception e) {
@@ -981,6 +1018,10 @@ public class StructuresSubsystemIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rsha",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rsha",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-Rsha", Boolean.FALSE);
+
             // approve
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
 
@@ -1012,6 +1053,10 @@ public class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Sg-Sys-Rsha", 0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rsha",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rsha",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-Rsha", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1073,6 +1118,10 @@ public class StructuresSubsystemIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rshc",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rshc",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-Rshc", Boolean.FALSE);
+
             // cancel
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
 
@@ -1104,6 +1153,10 @@ public class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Sg-Sys-Rshc", 0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rshc",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rshc",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-Rshc", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1165,6 +1218,10 @@ public class StructuresSubsystemIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rshr",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rshr",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-Rshr", Boolean.FALSE);
+
             // reject
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
 
@@ -1196,6 +1253,10 @@ public class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Sg-Sys-Rshr", 0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rshr",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rshr",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-Rshr", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1296,6 +1357,19 @@ public class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "P1",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "C1",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "R1",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "A1",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-P1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-C1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-R1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-A1",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-P1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-C1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-R1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-A1", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1464,6 +1538,19 @@ public class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9);
+
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "P9",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "C9",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "R9",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "A9",        Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-P9",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-C9",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-R9",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-A9",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-P9", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-C9", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-R9", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sg-Sys-A9", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1855,6 +1942,42 @@ public class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/children/SUBSYSTEM/" + uuid.toString(),               0, 0);
             ITUtilStructureElement.assertRead("/children/SYSTEM/" + systemUuid.toString(),           -1, 1);
             ITUtilStructureElement.assertRead("/children/SYSTEMGROUP/" + systemGroupUuid.toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AB1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AB2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AB3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AB4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AB5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AC1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AC2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AC3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AC4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AC5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AD1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AD2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AD3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AD4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AD5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AE1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AE2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AE3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AE4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AE5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AF1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AF2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AF3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AF4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AF5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AG1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AG2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AG3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AG4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AG5", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
index affcd3809b1a289f044474ac7614cf089dccb3c8..2ee4ad178b1e878c12cbf271d34a0adc52171780 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
@@ -103,7 +103,9 @@ public class StructuresSystemGroupIT {
             StructureElement structureElement = new StructureElement();
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Cc", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "CC", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, "Cc", Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, "CC", Boolean.TRUE);
 
             // validate create
 
@@ -291,6 +293,9 @@ public class StructuresSystemGroupIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
 
@@ -299,6 +304,9 @@ public class StructuresSystemGroupIT {
             structureElement = createdStructureElement;
             uuid = createdStructureElement.getUuid();
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.TRUE);
 
@@ -306,6 +314,9 @@ public class StructuresSystemGroupIT {
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
             structureElement = approvedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
 
@@ -360,6 +371,9 @@ public class StructuresSystemGroupIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
 
@@ -367,6 +381,9 @@ public class StructuresSystemGroupIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.TRUE);
 
@@ -374,6 +391,9 @@ public class StructuresSystemGroupIT {
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
             structureElement = cancelledStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
         } catch (Exception e) {
@@ -406,6 +426,9 @@ public class StructuresSystemGroupIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
 
@@ -413,6 +436,9 @@ public class StructuresSystemGroupIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.TRUE);
 
@@ -420,6 +446,9 @@ public class StructuresSystemGroupIT {
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
             structureElement = rejectedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEMGROUP, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
         } catch (Exception e) {
@@ -963,6 +992,8 @@ public class StructuresSystemGroupIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rsha", Boolean.FALSE);
+
             // approve
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
 
@@ -984,6 +1015,8 @@ public class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Rsha", 1, 1);
 
             ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rsha", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1035,6 +1068,8 @@ public class StructuresSystemGroupIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rshc", Boolean.FALSE);
+
             // cancel
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
 
@@ -1056,6 +1091,8 @@ public class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Rshc", 0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rshc", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1107,6 +1144,8 @@ public class StructuresSystemGroupIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rshr", Boolean.FALSE);
+
             // reject
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
 
@@ -1128,6 +1167,8 @@ public class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Rshr", 0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rshr", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1228,6 +1269,11 @@ public class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "P1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "C1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "R1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "A1", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1396,6 +1442,11 @@ public class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "P9", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "C9", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "R9", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "A9", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
@@ -1785,6 +1836,42 @@ public class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__",  10, 10);
 
             ITUtilStructureElement.assertRead("/children/SYSTEMGROUP/" + uuid.toString(), 0, 0);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AB1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AB2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AB3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AB4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AB5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AC1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AC2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AC3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AC4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AC5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AD1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AD2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AD3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AD4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AD5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AE1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AE2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AE3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AE4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AE5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AF1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AF2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AF3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AF4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AF5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AG1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AG2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AG3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AG4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AG5", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }
diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
index f19f039ba3e524f6da7cc946bb3a0059d024bd27..674a76698c345975133e6965ea90503768c22a02 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
@@ -121,11 +121,15 @@ public class StructuresSystemIT {
             StructureElement structureElement = new StructureElement();
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Cc", Boolean.FALSE);
-            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "Sg-Cc", Boolean.TRUE);
-            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "SG-Cc", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "CC", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "Sg",    Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "SG",    Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "Sg-Cc", Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "SG-Cc", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "Sg-Sg", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "Sg-SG", Boolean.FALSE);
             ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "Cc",    Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, "CC",    Boolean.TRUE);
 
             ITUtilStructureElement.assertValidate("[{asdf]", StructureChoice.CREATE, HttpURLConnection.HTTP_BAD_REQUEST);
             ITUtilStructureElement.assertCreate("[{asdf]", HttpURLConnection.HTTP_BAD_REQUEST);
@@ -301,6 +305,9 @@ public class StructuresSystemIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
 
@@ -308,6 +315,9 @@ public class StructuresSystemIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.TRUE);
 
@@ -315,6 +325,9 @@ public class StructuresSystemIT {
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
             structureElement = approvedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE,  Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.APPROVE, Boolean.FALSE);
         } catch (Exception e) {
@@ -347,6 +360,9 @@ public class StructuresSystemIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
 
@@ -354,6 +370,9 @@ public class StructuresSystemIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.TRUE);
 
@@ -361,6 +380,9 @@ public class StructuresSystemIT {
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
             structureElement = cancelledStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CANCEL, Boolean.FALSE);
         } catch (Exception e) {
@@ -393,6 +415,9 @@ public class StructuresSystemIT {
                   "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE,
                   null, "test who", "comment");
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
 
@@ -400,6 +425,9 @@ public class StructuresSystemIT {
             createdStructureElement = ITUtilStructureElement.assertCreate(structureElement);
             structureElement = createdStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.FALSE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.TRUE);
 
@@ -407,6 +435,9 @@ public class StructuresSystemIT {
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
             structureElement = rejectedStructureElement;
 
+            ITUtilStructureElement.assertExists         (Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.FALSE);
+            ITUtilStructureElement.assertIsValidToCreate(Type.SYSTEM, structureElement.getMnemonicpath(), Boolean.TRUE);
+
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.CREATE, Boolean.TRUE);
             ITUtilStructureElement.assertValidate(structureElement, StructureChoice.REJECT, Boolean.FALSE);
         } catch (Exception e) {
@@ -963,6 +994,9 @@ public class StructuresSystemIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Rsha",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rsha", Boolean.FALSE);
+
             // approve
             approvedStructureElement = ITUtilStructureElement.assertApprove(structureElement);
 
@@ -988,6 +1022,9 @@ public class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Sg-Rsha",     0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Rsha",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rsha", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1043,6 +1080,9 @@ public class StructuresSystemIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Rshc",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rshc", Boolean.FALSE);
+
             // cancel
             cancelledStructureElement = ITUtilStructureElement.assertCancel(structureElement);
 
@@ -1068,6 +1108,9 @@ public class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Sg-Rshc",     0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Rshc",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rshc", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1123,6 +1166,9 @@ public class StructuresSystemIT {
 
             ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), -1, 1);
 
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Rshr",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rshr", Boolean.FALSE);
+
             // reject
             rejectedStructureElement = ITUtilStructureElement.assertReject(structureElement);
 
@@ -1148,6 +1194,9 @@ public class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonicpath/Sg-Rshr",     0, 0);
 
             ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Rshr",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rshr", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1248,6 +1297,15 @@ public class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "P1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "C1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "R1",    Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "A1",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-P1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-C1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-R1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-A1", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1416,6 +1474,15 @@ public class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9);
             ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "P9",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "C9",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "R9",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "A9",    Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-P9", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-C9", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-R9", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-A9", Boolean.FALSE);
         } catch (Exception e) {
             fail();
         }
@@ -1806,6 +1873,42 @@ public class StructuresSystemIT {
 
             ITUtilStructureElement.assertRead("/children/SYSTEM/" + uuid.toString(),                  0, 0);
             ITUtilStructureElement.assertRead("/children/SYSTEMGROUP/" + systemGroupUuid.toString(), -1, 1);
+
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AA1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AA2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AA3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AA4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AA5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AB1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AB2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AB3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AB4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AB5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AC1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AC2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AC3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AC4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AC5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AD1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AD2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AD3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AD4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AD5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AE1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AE2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AE3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AE4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AE5", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AF1", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AF2", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AF3", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AF4", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AF5", Boolean.FALSE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AG1", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AG2", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AG3", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AG4", Boolean.TRUE);
+            ITUtilStructureElement.assertExists(Type.SYSTEM, "AG5", Boolean.TRUE);
         } catch (Exception e) {
             fail();
         }