diff --git a/src/main/java/org/openepics/names/util/NamingConventionUtil.java b/src/main/java/org/openepics/names/util/NamingConventionUtil.java
index 37768a29c08c75d703aefc2a728272ce621ef3c8..70fb999937b0c2c3ef4fcb315c72a09423925298 100644
--- a/src/main/java/org/openepics/names/util/NamingConventionUtil.java
+++ b/src/main/java/org/openepics/names/util/NamingConventionUtil.java
@@ -42,15 +42,19 @@ public class NamingConventionUtil {
 
     // Note
     //
-    //     ================================================================================
-    //     This class handles system structure and device structure of name convention
-    //     ================================================================================
+    //     ====================================================================================================
+    //     This class handles system structure and device structure of naming convention
+    //     ====================================================================================================
     //     ESS Naming Convention
-    //         system structure:device structure:process variable
+    //         name = system structure
+    //              = system structure:device structure-instance index
     //         ------------------------------------------------------------
     //         system structure need     to be part of name
     //         device structure need not to be part of name
-    //         process variable      not to be part of name
+    //         instance index   need not to be part of name
+    //         ------------------------------------------------------------
+    //         process variable      not to be part of name (!)
+    //         pv name = name:process variable
     //         ------------------------------------------------------------
     //         system structure
     //             system group
@@ -58,35 +62,39 @@ public class NamingConventionUtil {
     //             subsystem
     //         device structure
     //             discipline
+    //           ( device group )
     //             device type
-    //             instance index (name)
+    //         instance index
+    //         ------------------------------------------------------------
+    //         system group   optional
+    //         device group   not part of name
+    //         instance index optional
+    //     ====================================================================================================
+    //     Kind of names handled - naming convention
     //         ------------------------------------------------------------
-    //         system group is optional
-    //         instance index is optional
-    //     ================================================================================
-    //     Kind of names handled
-    //         CONVENTIONNAME_010
-    //         CONVENTIONNAME_011
-    //         CONVENTIONNAME_010_111
-    //         CONVENTIONNAME_011_110
-    //         CONVENTIONNAME_011_111
-    //         CONVENTIONNAME_111_110
-    //         CONVENTIONNAME_111_111
+    //         (1) able to handle
+    //         ------------------------------------------------------------
+    //             systemGroup
+    //             system
+    //             system-subsystem
+    //             systemGroup:discipline-deviceType-instanceIndex
+    //             system:discipline-deviceType-instanceIndex
+    //             system-subsystem:discipline-deviceType-instanceIndex
     //         ------------------------------------------------------------
-    //         system
-    //         system-subsystem
-    //         system:discipline-deviceType-instanceIndex
-    //         system-subsystem:discipline-deviceType
-    //         system-subsystem:discipline-deviceType-instanceIndex
-    //         systemGroup-system-subsystem:discipline-deviceType
-    //         systemGroup-system-subsystem:discipline-deviceType-instanceIndex
-    //     ================================================================================
+    //         (2) able to handle - old naming / naming convention - may exist
+    //         ------------------------------------------------------------
+    //             system-subsystem:discipline-deviceType
+    //             systemGroup-system-subsystem:discipline-deviceType
+    //             systemGroup-system-subsystem:discipline-deviceType-instanceIndex
+    //     ====================================================================================================
     //     delimiters
     //         :
     //         -
-    //     ================================================================================
+    //         ------------------------------------------------------------
+    //         1 occurrence of : expected, if 2 then pv name and erroneous from this perspective
+    //     ====================================================================================================
     //     This class to be able to handle past and present names
-    //     ================================================================================
+    //     ====================================================================================================
 
     // p&id - pipeline & instrumentation diagram
     public static final String DISCIPLINE_P_ID       = "P&ID";
@@ -277,26 +285,17 @@ public class NamingConventionUtil {
      * @return mnemonic path for system structure
      */
     public static String extractMnemonicPathSystemStructure(String conventionName) {
+        // see documentation at top of class to learn about kind of names
+        // (according to current and old naming convention)
+        // that are to be handled
+        //
+        // performance is important!
+
         if (!StringUtils.isEmpty(conventionName)) {
             int index = conventionName.indexOf(DELIMITER_EXTRA);
-            String mnemonicPath = null;
-            if (index != -1) {
-                mnemonicPath = conventionName.substring(0, index);
-            } else {
-                mnemonicPath = conventionName;
-            }
-
-            // 0 or 1 DELIMITER_INTRA expected
-            index = mnemonicPath.indexOf(DELIMITER_INTRA);
-            if (index != -1) {
-                if (mnemonicPath.indexOf(DELIMITER_INTRA, index + 1) != -1) {
-                    return null;
-                } else {
-                    return mnemonicPath;
-                }
-            } else {
-                return mnemonicPath;
-            }
+            return index != -1
+                    ? conventionName.substring(0, index)
+                    : conventionName;
         }
         return null;
     }
@@ -309,18 +308,24 @@ public class NamingConventionUtil {
      * @return mnemonic path for device structure
      */
     public static String extractMnemonicPathDeviceStructure(String conventionName) {
+        // see documentation at top of class to learn about kind of names
+        // (according to current and old naming convention)
+        // that are to be handled
+        //
+        // performance is important!
+
         if (!StringUtils.isEmpty(conventionName)) {
             int index = conventionName.indexOf(DELIMITER_EXTRA);
             if (index != -1) {
-                String discipline = extractDiscipline(conventionName);
-                String deviceType = extractDeviceType(conventionName);
-                if (!StringUtils.isEmpty(discipline) && !StringUtils.isEmpty(deviceType)) {
-                    return discipline + DELIMITER_INTRA + deviceType;
-                } else {
-                    return null;
+                String mnemonicpath = conventionName.substring(index + 1);
+
+                // discipline + device type
+                String[] deviceStructure = mnemonicpath.split(DELIMITER_INTRA);
+                if (deviceStructure.length == 3) {
+                    return deviceStructure[0] + DELIMITER_INTRA + deviceStructure[1];
+                } else if (deviceStructure.length == 2) {
+                    return mnemonicpath;
                 }
-            } else {
-                return null;
             }
         }
         return null;
diff --git a/src/test/java/org/openepics/names/util/NamingConventionUtilTest.java b/src/test/java/org/openepics/names/util/NamingConventionUtilTest.java
index 93c9d4ac57ea81ff7bb91a9119ef07dbafc3bd7f..89019c872982fe76cca27b18fe4d20a7a1e950c1 100644
--- a/src/test/java/org/openepics/names/util/NamingConventionUtilTest.java
+++ b/src/test/java/org/openepics/names/util/NamingConventionUtilTest.java
@@ -223,25 +223,28 @@ class NamingConventionUtilTest {
      */
     @Test
     void extractMnemonicPathSystemStructure() {
+        // may be put in loop for performance test
+        // loop size may be increased to 10000000 in order to view performance
+
         assertEquals(NULL,               NamingConventionUtil.extractMnemonicPathSystemStructure(NULL));
         assertEquals(NULL,               NamingConventionUtil.extractMnemonicPathSystemStructure(EMPTY));
         assertEquals(DUMMY,              NamingConventionUtil.extractMnemonicPathSystemStructure(DUMMY));
 
         assertEquals(CONVENTIONNAME_010, NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_010));
         assertEquals(CONVENTIONNAME_011, NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_011));
-        assertEquals(NULL,               NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_111));
+        assertEquals(CONVENTIONNAME_111, NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_111));
 
         assertEquals("CWL",              NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_010_111));
         assertEquals("LEBT-010",         NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_011_110));
         assertEquals("CWL-CWSE05",       NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_011_111));
-        assertEquals(NULL,               NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_111_110));
-        assertEquals(NULL,               NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_111_111));
+        assertEquals(CONVENTIONNAME_111, NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_111_110));
+        assertEquals("DUMMY-CWL-CWSE05", NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_111_111));
 
         assertEquals("CWL-CWSE05",       NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_011_111_SC1));
         assertEquals("CWL-CWSE05",       NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_011_111_SC2));
 
         assertEquals("CW1-CWSE5",        NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_011_111_EQCLASS));
-        assertEquals(NULL,               NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_111_111_EQCLASS));
+        assertEquals("DUMMY-CW1-CWSE5",  NamingConventionUtil.extractMnemonicPathSystemStructure(CONVENTIONNAME_111_111_EQCLASS));
     }
 
     /**
@@ -249,6 +252,9 @@ class NamingConventionUtilTest {
      */
     @Test
     void extractMnemonicPathDeviceStructure() {
+        // may be put in loop for performance test
+        // loop size may be increased to 1000000 in order to view performance
+
         assertEquals(NULL,          NamingConventionUtil.extractMnemonicPathDeviceStructure(NULL));
         assertEquals(NULL,          NamingConventionUtil.extractMnemonicPathDeviceStructure(EMPTY));
         assertEquals(NULL,          NamingConventionUtil.extractMnemonicPathDeviceStructure(DUMMY));