diff --git a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java
index f517546fdf42e7d906d86ac15d8853a29a6aa0ea..771fd79d2415e8b1fd4ad6aa60f75dcee8d5e814 100644
--- a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java
+++ b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java
@@ -209,7 +209,9 @@ public class DeviceGroupRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -225,7 +227,9 @@ public class DeviceGroupRepository {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
@@ -444,7 +448,9 @@ public class DeviceGroupRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -460,7 +466,9 @@ public class DeviceGroupRepository {
                     cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)), cb.asc(from.get(Persistable.FIELD_ID)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
diff --git a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java
index 919866728d2e89890406de96eac0357af0ea7a9b..a56c966b8e768242639826b9eada03feca2a4f31 100644
--- a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java
+++ b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java
@@ -209,7 +209,9 @@ public class DeviceTypeRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -225,7 +227,9 @@ public class DeviceTypeRepository {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
@@ -444,7 +448,9 @@ public class DeviceTypeRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -460,7 +466,9 @@ public class DeviceTypeRepository {
                     cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)), cb.asc(from.get(Persistable.FIELD_ID)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
diff --git a/src/main/java/org/openepics/names/repository/DisciplineRepository.java b/src/main/java/org/openepics/names/repository/DisciplineRepository.java
index 10826f776b981fb3a2bb133553d1bbb912a4cec8..b814225e649fcaea589f781b5275f06fb5f772eb 100644
--- a/src/main/java/org/openepics/names/repository/DisciplineRepository.java
+++ b/src/main/java/org/openepics/names/repository/DisciplineRepository.java
@@ -203,7 +203,9 @@ public class DisciplineRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -219,7 +221,9 @@ public class DisciplineRepository {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
@@ -430,7 +434,9 @@ public class DisciplineRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -446,7 +452,9 @@ public class DisciplineRepository {
                     cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)), cb.asc(from.get(Persistable.FIELD_ID)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
diff --git a/src/main/java/org/openepics/names/repository/NameRepository.java b/src/main/java/org/openepics/names/repository/NameRepository.java
index 31e2c1eb84577447f248435d7a761c39710c183e..e13e825fb33053794c96a0099f8aa2af9e507962 100644
--- a/src/main/java/org/openepics/names/repository/NameRepository.java
+++ b/src/main/java/org/openepics/names/repository/NameRepository.java
@@ -201,10 +201,12 @@ public class NameRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldName.NAME.equals(orderBy)) {
+                if (FieldName.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldName.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Name.FIELD_CONVENTION_NAME)));
                 } else if (FieldName.NAMEEQUIVALENCE.equals(orderBy)) {
-                        cq.orderBy(cb.asc(from.get(Name.FIELD_CONVENTION_NAME_EQUIVALENCE)));
+                    cq.orderBy(cb.asc(from.get(Name.FIELD_CONVENTION_NAME_EQUIVALENCE)));
                 } else if (FieldName.SYSTEMSTRUCTURE.equals(orderBy)) {
                     cq.orderBy(cb.asc(cb.function(NameStructure.FUNCTION_GET_MNEMONIC_PATH_SYSTEM_STRUCTURE, String.class, from.get(Name.FIELD_CONVENTION_NAME))));
                 } else if (FieldName.DEVICESTRUCTURE.equals(orderBy)) {
@@ -219,7 +221,9 @@ public class NameRepository {
                     cq.orderBy(cb.asc(from.get(Name.FIELD_CONVENTION_NAME)));
                 }
             } else {
-                if (FieldName.NAME.equals(orderBy)) {
+                if (FieldName.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldName.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Name.FIELD_CONVENTION_NAME)));
                 } else if (FieldName.NAMEEQUIVALENCE.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Name.FIELD_CONVENTION_NAME_EQUIVALENCE)));
@@ -410,7 +414,9 @@ public class NameRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldName.NAME.equals(orderBy)) {
+                if (FieldName.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldName.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Name.FIELD_CONVENTION_NAME)));
                 } else if (FieldName.NAMEEQUIVALENCE.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Name.FIELD_CONVENTION_NAME_EQUIVALENCE)));
@@ -428,7 +434,9 @@ public class NameRepository {
                     cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)), cb.asc(from.get(Persistable.FIELD_ID)));
                 }
             } else {
-                if (FieldName.NAME.equals(orderBy)) {
+                if (FieldName.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldName.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Name.FIELD_CONVENTION_NAME)));
                 } else if (FieldName.NAMEEQUIVALENCE.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Name.FIELD_CONVENTION_NAME_EQUIVALENCE)));
@@ -533,7 +541,10 @@ public class NameRepository {
         if (orderBy != null) {
             sqlOrderBy.append(" order by ");
 
-            if (FieldName.NAMEEQUIVALENCE.equals(orderBy)) {
+            if (FieldName.UUID.equals(orderBy)) {
+                sqlOrderBy.append("n.");
+                sqlOrderBy.append(NameStructure.FIELD_UUID);
+            } else if (FieldName.NAMEEQUIVALENCE.equals(orderBy)) {
                 sqlOrderBy.append("n.");
                 sqlOrderBy.append(Name.FIELD_CONVENTION_NAME_EQUIVALENCE);
             } else if (FieldName.SYSTEMSTRUCTURE.equals(orderBy)) {
diff --git a/src/main/java/org/openepics/names/repository/SubsystemRepository.java b/src/main/java/org/openepics/names/repository/SubsystemRepository.java
index 5a1e667f9170269acbb037af0bb084eab291f65f..101093186af8f957d38092439ae3528540cbe33b 100644
--- a/src/main/java/org/openepics/names/repository/SubsystemRepository.java
+++ b/src/main/java/org/openepics/names/repository/SubsystemRepository.java
@@ -209,7 +209,9 @@ public class SubsystemRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -225,7 +227,9 @@ public class SubsystemRepository {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
@@ -444,7 +448,9 @@ public class SubsystemRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -460,7 +466,9 @@ public class SubsystemRepository {
                     cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)), cb.asc(from.get(Persistable.FIELD_ID)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
diff --git a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java
index cdce2192c106ca6e664537103f4d47eb2df1936b..aa12612993729a1d7e01fde432e5257716acddba 100644
--- a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java
+++ b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java
@@ -200,7 +200,9 @@ public class SystemGroupRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -216,7 +218,9 @@ public class SystemGroupRepository {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
@@ -427,7 +431,9 @@ public class SystemGroupRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -443,7 +449,9 @@ public class SystemGroupRepository {
                     cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)), cb.asc(from.get(Persistable.FIELD_ID)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
diff --git a/src/main/java/org/openepics/names/repository/SystemRepository.java b/src/main/java/org/openepics/names/repository/SystemRepository.java
index f3ba1296288d496eb8c5530a0c26ca63d6fc0b8a..021d263e60a34df21b097b70bcc4537a48f1243d 100644
--- a/src/main/java/org/openepics/names/repository/SystemRepository.java
+++ b/src/main/java/org/openepics/names/repository/SystemRepository.java
@@ -209,7 +209,9 @@ public class SystemRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -225,7 +227,9 @@ public class SystemRepository {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
@@ -444,7 +448,9 @@ public class SystemRepository {
 
         if (orderBy != null) {
             if (BooleanUtils.toBoolean(isAsc)) {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.asc(from.get(Structure.FIELD_MNEMONIC)));
@@ -460,7 +466,9 @@ public class SystemRepository {
                     cq.orderBy(cb.asc(from.get(NameStructure.FIELD_UUID)), cb.asc(from.get(Persistable.FIELD_ID)));
                 }
             } else {
-                if (FieldStructure.NAME.equals(orderBy)) {
+                if (FieldStructure.UUID.equals(orderBy)) {
+                    cq.orderBy(cb.desc(from.get(NameStructure.FIELD_UUID)));
+                } else if (FieldStructure.NAME.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_NAME)));
                 } else if (FieldStructure.MNEMONIC.equals(orderBy)) {
                     cq.orderBy(cb.desc(from.get(Structure.FIELD_MNEMONIC)));
diff --git a/src/main/java/org/openepics/names/rest/beans/element/NameElementCommand.java b/src/main/java/org/openepics/names/rest/beans/element/NameElementCommand.java
index 32ee57d2910c5afa76a4eb19761b37796f4ff632..ece6d3f9d985f2527317c2fd8571c8f1f82a9901 100644
--- a/src/main/java/org/openepics/names/rest/beans/element/NameElementCommand.java
+++ b/src/main/java/org/openepics/names/rest/beans/element/NameElementCommand.java
@@ -135,10 +135,6 @@ public class NameElementCommand implements Serializable {
         if (other == null)
             return false;
 
-        if (!super.equals(other)) {
-            return false;
-        }
-
         if (getUuid() == null) {
             if (other.getUuid() != null)
                 return false;
diff --git a/src/main/java/org/openepics/names/rest/beans/element/NameElementCommandConfirm.java b/src/main/java/org/openepics/names/rest/beans/element/NameElementCommandConfirm.java
index 719dd4588c45f2486a389db3696dba9eb49b0e43..c305db947ca144716f826adf3bae80238c527acb 100644
--- a/src/main/java/org/openepics/names/rest/beans/element/NameElementCommandConfirm.java
+++ b/src/main/java/org/openepics/names/rest/beans/element/NameElementCommandConfirm.java
@@ -66,10 +66,6 @@ public class NameElementCommandConfirm implements Serializable {
         if (other == null)
             return false;
 
-        if (!super.equals(other)) {
-            return false;
-        }
-
         if (getUuid() == null) {
             if (other.getUuid() != null)
                 return false;
diff --git a/src/main/java/org/openepics/names/rest/beans/element/NameElementCommandCreate.java b/src/main/java/org/openepics/names/rest/beans/element/NameElementCommandCreate.java
index daff80baac0581501f822321f009db24dc8e6806..cfc9b5fab5cd8a1b29cec407e43cbe82f87deed8 100644
--- a/src/main/java/org/openepics/names/rest/beans/element/NameElementCommandCreate.java
+++ b/src/main/java/org/openepics/names/rest/beans/element/NameElementCommandCreate.java
@@ -97,10 +97,6 @@ public class NameElementCommandCreate implements Serializable {
         if (other == null)
             return false;
 
-        if (!super.equals(other)) {
-            return false;
-        }
-
         if (getParentSystemStructure() == null) {
             if (other.getParentSystemStructure() != null)
                 return false;
diff --git a/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommandConfirm.java b/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommandConfirm.java
index 736d78c3c39b603986610c3731d3ab1912b3d9d8..d7a2fb92706f05477a5b02769f9a4c018a1c78d8 100644
--- a/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommandConfirm.java
+++ b/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommandConfirm.java
@@ -78,10 +78,6 @@ public class StructureElementCommandConfirm implements Serializable {
         if (other == null)
             return false;
 
-        if (!super.equals(other)) {
-            return false;
-        }
-
         if (getUuid() == null) {
             if (other.getUuid() != null)
                 return false;
diff --git a/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommandCreate.java b/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommandCreate.java
index 190680a585828b3a828d128964a9d183e33a219f..2b6a201e63485d0594353a6873dc327708d19e6c 100644
--- a/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommandCreate.java
+++ b/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommandCreate.java
@@ -110,10 +110,6 @@ public class StructureElementCommandCreate implements Serializable {
         if (other == null)
             return false;
 
-        if (!super.equals(other)) {
-            return false;
-        }
-
         if (getType() == null) {
             if (other.getType() != null)
                 return false;
diff --git a/src/test/java/org/openepics/names/docker/NamesIT.java b/src/test/java/org/openepics/names/docker/NamesIT.java
index 9b4dc22c8daf34f1a3ac62e39b282f647bd84a38..dd49aa455c0d0707fd1d9a05a1f6b161cb6038bb 100644
--- a/src/test/java/org/openepics/names/docker/NamesIT.java
+++ b/src/test/java/org/openepics/names/docker/NamesIT.java
@@ -38,6 +38,7 @@ import org.openepics.names.rest.beans.element.NameElementCommandUpdate;
 import org.openepics.names.rest.beans.element.StructureElement;
 import org.openepics.names.rest.beans.element.StructureElementCommandConfirm;
 import org.openepics.names.rest.beans.element.StructureElementCommandCreate;
+import org.openepics.names.rest.beans.response.ResponsePageNameElements;
 import org.openepics.names.util.NameCommand;
 import org.openepics.names.util.NameElementUtil;
 import org.testcontainers.containers.DockerComposeContainer;
@@ -908,6 +909,7 @@ class NamesIT {
         NameElementCommandUpdate nameElementCommandUpdate = null;
         NameElementCommandConfirm nameElementCommandConfirm = null;
         NameElement responseNameElement = null;
+        ResponsePageNameElements response, response2 = null;
         UUID uuid, uuid2 = null;
 
         NameElement nameElement1, nameElement7, nameElement8 = null;
@@ -981,6 +983,12 @@ class NamesIT {
             //     pagination
             //         page, pageSize
             //         default pageSize 100
+            //     sorting
+            //         FieldStructure
+            //         data content give what kind of sorting may be done and tested in this way
+            //         compare in query result for sorting asc and desc
+            //             content for field in first and last items    -    always possible
+            //             first and last items                         -    not always possible
 
             ITUtilNameElement.assertRead("", 13, -1);
 
@@ -1036,6 +1044,13 @@ class NamesIT {
             ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=2&pageSize=3",                    2);
             ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=3&pageSize=3",                    0);
 
+            response  = ITUtilNameElement.assertRead("?index=00_&page=0&pageSize=3&orderBy=WHEN&isAsc=true",   3);
+            response2 = ITUtilNameElement.assertRead("?index=00_&page=2&pageSize=3&orderBy=WHEN&isAsc=false",  2);
+            assertEquals(response.getList().get(0),  response2.getList().get(response2.getList().size()-1));
+            response  = ITUtilNameElement.assertRead("?index=00_&page=0&pageSize=3&orderBy=WHEN&isAsc=false",  3);
+            response2 = ITUtilNameElement.assertRead("?index=00_&page=2&pageSize=3&orderBy=WHEN&isAsc=true",   2);
+            assertEquals(response.getList().get(0),  response2.getList().get(response2.getList().size()-1));
+
             // name or uuid
             //     /{name}
             ITUtilNameElement.assertRead("/" + systemGroupAcc.toString(),      0);
@@ -1097,6 +1112,13 @@ class NamesIT {
             ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=1&pageSize=5",            5);
             ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=2&pageSize=5",            2);
             ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=3&pageSize=5",            0);
+
+            response  = ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=0&pageSize=5&orderBy=WHEN&isAsc=true",   5);
+            response2 = ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=2&pageSize=5&orderBy=WHEN&isAsc=false",  2);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+            response  = ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=0&pageSize=5&orderBy=WHEN&isAsc=false",  5);
+            response2 = ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=2&pageSize=5&orderBy=WHEN&isAsc=true",   2);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
         } catch (Exception e) {
             fail();
         }
diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
index 240a5bc0c145e03e4a9f9290bb2d62c22a187c86..ae18fec670fe867b8bc52113d22a8c8191d8b41e 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
@@ -34,6 +34,7 @@ import org.openepics.names.rest.beans.element.StructureElementCommand;
 import org.openepics.names.rest.beans.element.StructureElementCommandConfirm;
 import org.openepics.names.rest.beans.element.StructureElementCommandCreate;
 import org.openepics.names.rest.beans.element.StructureElementCommandUpdate;
+import org.openepics.names.rest.beans.response.ResponsePageStructureElements;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureElementUtil;
 import org.testcontainers.containers.DockerComposeContainer;
@@ -1612,6 +1613,7 @@ class StructuresDeviceGroupIT {
         StructureElementCommandUpdate structureElementCommandUpdate = null;
         StructureElementCommandConfirm structureElementCommandConfirm = null;
         StructureElement createdStructureElement = null;
+        ResponsePageStructureElements response, response2 = null;
         UUID uuid = null;
         UUID uuid2 = null;
 
@@ -1900,6 +1902,12 @@ class StructuresDeviceGroupIT {
             //     pagination
             //         page, pageSize
             //         default pageSize 100
+            //     sorting
+            //         FieldStructure
+            //         data content give what kind of sorting may be done and tested in this way
+            //         compare in query result for sorting asc and desc
+            //             content for field in first and last items    -    always possible
+            //             first and last items                         -    not always possible
 
             ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2",                                                  30);
             ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&mnemonicPath=Di2",                                  5);
@@ -1968,6 +1976,18 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=2&pageSize=12",                  6);
             ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=3&pageSize=12",                  0);
 
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=0&pageSize=12",       12);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=1&pageSize=12",       12);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=2&pageSize=12",        1);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=3&pageSize=12",        0);
+
+            response  = ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=12&orderBy=WHEN&isAsc=true",      12);
+            response2 = ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=2&pageSize=12&orderBy=WHEN&isAsc=false",      6);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+            response  = ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=12&orderBy=WHEN&isAsc=false",     12);
+            response2 = ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=2&pageSize=12&orderBy=WHEN&isAsc=true",       6);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -2026,6 +2046,13 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=2&pageSize=15",               10);
             ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=3&pageSize=15",                0);
 
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=0&pageSize=15&orderBy=WHEN&isAsc=true",   15);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=2&pageSize=15&orderBy=WHEN&isAsc=false",  10);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=0&pageSize=15&orderBy=WHEN&isAsc=false",  15);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=2&pageSize=15&orderBy=WHEN&isAsc=true",   10);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di2", Boolean.FALSE);
         } 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 a79869abdb5b605d24b48b9b7e7a7dabe0d8cc25..7a686552e6f85a9be603b96e73d5e664066ffb09 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
@@ -34,6 +34,7 @@ import org.openepics.names.rest.beans.element.StructureElementCommand;
 import org.openepics.names.rest.beans.element.StructureElementCommandConfirm;
 import org.openepics.names.rest.beans.element.StructureElementCommandCreate;
 import org.openepics.names.rest.beans.element.StructureElementCommandUpdate;
+import org.openepics.names.rest.beans.response.ResponsePageStructureElements;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureElementUtil;
 import org.testcontainers.containers.DockerComposeContainer;
@@ -1620,6 +1621,7 @@ class StructuresDeviceTypeIT {
         StructureElementCommandUpdate structureElementCommandUpdate = null;
         StructureElementCommandConfirm structureElementCommandConfirm = null;
         StructureElement createdStructureElement = null;
+        ResponsePageStructureElements response, response2 = null;
         UUID uuid = null;
         UUID uuid2 = null;
 
@@ -1908,6 +1910,12 @@ class StructuresDeviceTypeIT {
             //     pagination
             //         page, pageSize
             //         default pageSize 100
+            //     sorting
+            //         FieldStructure
+            //         data content give what kind of sorting may be done and tested in this way
+            //         compare in query result for sorting asc and desc
+            //             content for field in first and last items    -    always possible
+            //             first and last items                         -    not always possible
 
             ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&mnemonic=A__",                                 10);
@@ -1978,6 +1986,18 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=2&pageSize=20",                      5);
             ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=3&pageSize=20",                      0);
 
+            ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",     6);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",     0);
+
+            response  = ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",   20);
+            response2 = ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",   5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+            response  = ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",  20);
+            response2 = ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",    5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -2036,7 +2056,7 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&description=%other%",                    40);
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&who=%wh%",                              100, -1);
 
-            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&uuid=" + uuid2.toString() + "&description=more%",   8);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&uuid=" + uuid2.toString() + "&description=more%",           8);
 
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=100",       20);
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=1&pageSize=100",        0);
@@ -2047,6 +2067,13 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=2&pageSize=8",          4);
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=3&pageSize=8",          0);
 
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=false",   4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=true",    4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA2", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA3", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
index 6a07a4a8052dbac10728084b5546e5990df17d04..109a74ce7182308935d1a593d961a573ea9c8f5f 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
@@ -33,6 +33,7 @@ import org.openepics.names.rest.beans.element.StructureElementCommand;
 import org.openepics.names.rest.beans.element.StructureElementCommandConfirm;
 import org.openepics.names.rest.beans.element.StructureElementCommandCreate;
 import org.openepics.names.rest.beans.element.StructureElementCommandUpdate;
+import org.openepics.names.rest.beans.response.ResponsePageStructureElements;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureElementUtil;
 import org.testcontainers.containers.DockerComposeContainer;
@@ -1517,6 +1518,7 @@ class StructuresDisciplineIT {
         StructureElementCommandUpdate structureElementCommandUpdate = null;
         StructureElementCommandConfirm structureElementCommandConfirm = null;
         StructureElement createdStructureElement = null;
+        ResponsePageStructureElements response, response2 = null;
         UUID uuid = null;
         UUID uuid2 = null;
         UUID uuidRandom = UUID.randomUUID();
@@ -1806,6 +1808,12 @@ class StructuresDisciplineIT {
             //     pagination
             //         page, pageSize
             //         default pageSize 100
+            //     sorting
+            //         FieldStructure
+            //         data content give what kind of sorting may be done and tested in this way
+            //         compare in query result for sorting asc and desc
+            //             content for field in first and last items    -    always possible
+            //             first and last items                         -    not always possible
 
             ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&mnemonic=A__",                                 10);
@@ -1873,6 +1881,18 @@ class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=2&pageSize=20",                 5);
             ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=3&pageSize=20",                 0);
 
+            ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",     6);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",     0);
+
+            response  = ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",   20);
+            response2 = ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",   5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+            response  = ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",  20);
+            response2 = ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",    5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -1913,7 +1933,7 @@ class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&description=%other%",               40);
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&who=%wh%",                         100, -1);
 
-            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&uuid=" + uuid2.toString() + "&description=more%",   8);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&uuid=" + uuid2.toString() + "&description=more%",           8);
 
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=100",  20);
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=1&pageSize=100",   0);
@@ -1924,6 +1944,13 @@ class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=2&pageSize=8",     4);
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=3&pageSize=8",     0);
 
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=false",   4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=true",    4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA2", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA3", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
index f605160fd9e84089752f235053653a0dec113835..32f8948e66f432cb4fb00b933db7230e1c6da395 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
@@ -34,6 +34,7 @@ import org.openepics.names.rest.beans.element.StructureElementCommand;
 import org.openepics.names.rest.beans.element.StructureElementCommandConfirm;
 import org.openepics.names.rest.beans.element.StructureElementCommandCreate;
 import org.openepics.names.rest.beans.element.StructureElementCommandUpdate;
+import org.openepics.names.rest.beans.response.ResponsePageStructureElements;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureElementUtil;
 import org.testcontainers.containers.DockerComposeContainer;
@@ -1668,6 +1669,7 @@ class StructuresSubsystemIT {
         StructureElementCommandUpdate structureElementCommandUpdate = null;
         StructureElementCommandConfirm structureElementCommandConfirm = null;
         StructureElement createdStructureElement = null;
+        ResponsePageStructureElements response, response2 = null;
         UUID uuid = null;
         UUID uuid2 = null;
 
@@ -1956,6 +1958,12 @@ class StructuresSubsystemIT {
             //     pagination
             //         page, pageSize
             //         default pageSize 100
+            //     sorting
+            //         FieldStructure
+            //         data content give what kind of sorting may be done and tested in this way
+            //         compare in query result for sorting asc and desc
+            //             content for field in first and last items    -    always possible
+            //             first and last items                         -    not always possible
 
             ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&mnemonic=A__",                                 10);
@@ -2026,6 +2034,18 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=2&pageSize=20",                      5);
             ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=3&pageSize=20",                      0);
 
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",     6);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",     0);
+
+            response  = ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",   20);
+            response2 = ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",   5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+            response  = ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",  20);
+            response2 = ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",    5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -2094,7 +2114,7 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&description=%other%",                    40);
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&who=%wh%",                              100, -1);
 
-            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&uuid=" + uuid2.toString() + "&description=more%",   8);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&uuid=" + uuid2.toString() + "&description=more%",           8);
 
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=100",       20);
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=1&pageSize=100",        0);
@@ -2105,6 +2125,13 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=2&pageSize=8",          4);
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=3&pageSize=8",          0);
 
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=false",   4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=true",    4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA2", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA3", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
index d3c6d6bc2aed0206c18993b1f10f59e19b33a23a..ffb14091d5ac4ca3df114d10765bb5f290745036 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
@@ -34,6 +34,7 @@ import org.openepics.names.rest.beans.element.StructureElementCommand;
 import org.openepics.names.rest.beans.element.StructureElementCommandConfirm;
 import org.openepics.names.rest.beans.element.StructureElementCommandCreate;
 import org.openepics.names.rest.beans.element.StructureElementCommandUpdate;
+import org.openepics.names.rest.beans.response.ResponsePageStructureElements;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureElementUtil;
 import org.testcontainers.containers.DockerComposeContainer;
@@ -1579,6 +1580,7 @@ class StructuresSystemGroupIT {
         StructureElementCommandUpdate structureElementCommandUpdate = null;
         StructureElementCommandConfirm structureElementCommandConfirm = null;
         StructureElement createdStructureElement = null;
+        ResponsePageStructureElements response, response2 = null;
         UUID uuid = null;
         UUID uuid2 = null;
         UUID uuidRandom = UUID.randomUUID();
@@ -1868,6 +1870,12 @@ class StructuresSystemGroupIT {
             //     pagination
             //         page, pageSize
             //         default pageSize 100
+            //     sorting
+            //         FieldStructure
+            //         data content give what kind of sorting may be done and tested in this way
+            //         compare in query result for sorting asc and desc
+            //             content for field in first and last items    -    always possible
+            //             first and last items                         -    not always possible
 
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&mnemonic=A__",                                 10);
@@ -1935,10 +1943,17 @@ class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=2&pageSize=20",                 5);
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=3&pageSize=20",                 0);
 
-            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",  12);
-            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",  12);
-            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",   6);
-            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",   0);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",     6);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",     0);
+
+            response  = ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",   20);
+            response2 = ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",   5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+            response  = ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",  20);
+            response2 = ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",    5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
 
             // children
             //     /children/{uuid}
@@ -1980,7 +1995,7 @@ class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&description=%other%",               40);
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&who=%wh%",                         100, -1);
 
-            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&uuid=" + uuid2.toString() + "&description=more%",         8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&uuid=" + uuid2.toString() + "&description=more%",           8);
 
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=100",  20);
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=1&pageSize=100",   0);
@@ -1991,6 +2006,13 @@ class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=2&pageSize=8",     4);
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=3&pageSize=8",     0);
 
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=false",   4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=true",    4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA2", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA3", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
index 6438d2f202340d0e09b4761dff6a368e26610a9e..bcfb360b621b38496b4638ec7ecfb8323ac76459 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
@@ -34,6 +34,7 @@ import org.openepics.names.rest.beans.element.StructureElementCommand;
 import org.openepics.names.rest.beans.element.StructureElementCommandConfirm;
 import org.openepics.names.rest.beans.element.StructureElementCommandCreate;
 import org.openepics.names.rest.beans.element.StructureElementCommandUpdate;
+import org.openepics.names.rest.beans.response.ResponsePageStructureElements;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureElementUtil;
 import org.testcontainers.containers.DockerComposeContainer;
@@ -1601,6 +1602,7 @@ class StructuresSystemIT {
         StructureElementCommandUpdate structureElementCommandUpdate = null;
         StructureElementCommandConfirm structureElementCommandConfirm = null;
         StructureElement createdStructureElement = null;
+        ResponsePageStructureElements response, response2 = null;
         UUID uuid = null;
         UUID uuid2 = null;
 
@@ -1889,6 +1891,12 @@ class StructuresSystemIT {
             //     pagination
             //         page, pageSize
             //         default pageSize 100
+            //     sorting
+            //         FieldStructure
+            //         data content give what kind of sorting may be done and tested in this way
+            //         compare in query result for sorting asc and desc
+            //             content for field in first and last items    -    always possible
+            //             first and last items                         -    not always possible
 
             ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&mnemonic=A__",                                 10);
@@ -1957,6 +1965,18 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=2&pageSize=20",                         5);
             ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=3&pageSize=20",                         0);
 
+            ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",    12);
+            ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",     6);
+            ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",     0);
+
+            response  = ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",   20);
+            response2 = ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",   5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+            response  = ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",  20);
+            response2 = ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",    5);
+            assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -2006,7 +2026,7 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&description=%other%",                       40);
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&who=%wh%",                                 100, -1);
 
-            ITUtilStructureElement.assertRead("/history?type=SYSTEM&uuid=" + uuid2.toString() + "&description=more%",   8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&uuid=" + uuid2.toString() + "&description=more%",           8);
 
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=0&pageSize=100",          20);
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=1&pageSize=100",           0);
@@ -2017,6 +2037,13 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=2&pageSize=8",             4);
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=3&pageSize=8",             0);
 
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=false",   4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=2&pageSize=8&orderBy=WHEN&isAsc=true",    4);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+
             ITUtilStructureElement.assertExists(Type.SYSTEM, "AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "AA2", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "AA3", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/rest/beans/element/NameElementTest.java b/src/test/java/org/openepics/names/rest/beans/element/NameElementTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ad82eee1e1dae98813c83fb6268cce2060b6c645
--- /dev/null
+++ b/src/test/java/org/openepics/names/rest/beans/element/NameElementTest.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2023 European Spallation Source ERIC.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.openepics.names.rest.beans.element;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.util.Date;
+import java.util.UUID;
+
+import org.junit.jupiter.api.Test;
+import org.openepics.names.rest.beans.Status;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * Unit tests for NameElement class.
+ *
+ * @author Lars Johansson
+ *
+ * @see NameElement
+ */
+class NameElementTest {
+
+    @Test
+    void equals() {
+        NameElement ne1 = null, ne2 = null;
+        Date date = new Date();
+
+        ne1 = new NameElement(
+                UUID.fromString("45bdc415-cf5a-4650-b6dd-478540830c2a"), UUID.fromString("eb7e55c2-012b-419d-881a-58a858894e92"), null, null,
+                "System structure only", null,
+                "Acc", null, "Acc",
+                Status.APPROVED, true, false,
+                date, "test who");
+        ne2 = new NameElement(
+                UUID.fromString("45bdc415-cf5a-4650-b6dd-478540830c2a"), UUID.fromString("eb7e55c2-012b-419d-881a-58a858894e92"), null, null,
+                "System structure only", null,
+                "Acc", null, "Acc",
+                Status.APPROVED, true, false,
+                date, "test who");
+
+        assertEquals(ne1, ne2);
+    }
+
+    @Test
+    void equals2() {
+        ObjectMapper mapper = new ObjectMapper();
+        NameElement ne1 = null, ne2 = null;
+        String json = "{\"uuid\": \"45bdc415-cf5a-4650-b6dd-478540830c2a\", \"parentSystemStructure\": \"eb7e55c2-012b-419d-881a-58a858894e92\", \"parentDeviceStructure\": null, \"systemStructure\": \"Acc\", \"deviceStructure\": null, \"index\": null, \"name\": \"Acc\", \"description\": \"System structure only\", \"status\": \"APPROVED\", \"latest\": true, \"deleted\": false, \"when\": null, \"who\": \"test who\", \"comment\": null}";
+
+        try {
+            ne1 = mapper.readValue(json, NameElement.class);
+            ne2 = mapper.readValue(json, NameElement.class);
+        } catch (JsonMappingException e) {
+            fail();
+        } catch (JsonProcessingException e) {
+            fail();
+        }
+
+        assertEquals(ne1, ne2);
+    }
+
+    @Test
+    void notEquals() {
+        NameElement ne1 = null, ne2 = null;
+        Date date = new Date();
+
+        ne1 = new NameElement(
+                UUID.fromString("45bdc415-cf5a-4650-b6dd-478540830c2a"), UUID.fromString("eb7e55c2-012b-419d-881a-58a858894e92"), null, null,
+                "System structure only", null,
+                "Acc", null, "Acc",
+                Status.APPROVED, true, false,
+                date, "test who");
+        ne2 = new NameElement(
+                UUID.fromString("55bdc415-cf5a-4650-b6dd-478540830c2a"), UUID.fromString("eb7e55c2-012b-419d-881a-58a858894e92"), null, null,
+                "System structure only", null,
+                "Acc", null, "Acc",
+                Status.APPROVED, true, false,
+                date, "test who");
+
+        assertNotEquals(ne1, ne2);
+    }
+
+    @Test
+    void notEquals2() {
+        ObjectMapper mapper = new ObjectMapper();
+        NameElement ne1 = null, ne2 = null;
+        String json  = "{\"uuid\": \"45bdc415-cf5a-4650-b6dd-478540830c2a\", \"parentSystemStructure\": \"eb7e55c2-012b-419d-881a-58a858894e92\", \"parentDeviceStructure\": null, \"systemStructure\": \"Acc\", \"deviceStructure\": null, \"index\": null, \"name\": \"Acc\", \"description\": \"System structure only\", \"status\": \"APPROVED\", \"latest\": true, \"deleted\": false, \"when\": null, \"who\": \"test who\", \"comment\": null}";
+        String json2 = "{\"uuid\": \"55bdc415-cf5a-4650-b6dd-478540830c2a\", \"parentSystemStructure\": \"eb7e55c2-012b-419d-881a-58a858894e92\", \"parentDeviceStructure\": null, \"systemStructure\": \"Acc\", \"deviceStructure\": null, \"index\": null, \"name\": \"Acc\", \"description\": \"System structure only\", \"status\": \"APPROVED\", \"latest\": true, \"deleted\": false, \"when\": null, \"who\": \"test who\", \"comment\": null}";
+
+        try {
+            ne1 = mapper.readValue(json,  NameElement.class);
+            ne2 = mapper.readValue(json2, NameElement.class);
+        } catch (JsonMappingException e) {
+            fail();
+        } catch (JsonProcessingException e) {
+            fail();
+        }
+
+        assertNotEquals(ne1, ne2);
+    }
+
+}
diff --git a/src/test/java/org/openepics/names/rest/beans/element/StructureElementTest.java b/src/test/java/org/openepics/names/rest/beans/element/StructureElementTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfa483c65b400cc367d68baa538546f80c8914c4
--- /dev/null
+++ b/src/test/java/org/openepics/names/rest/beans/element/StructureElementTest.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2023 European Spallation Source ERIC.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.openepics.names.rest.beans.element;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.util.Date;
+import java.util.UUID;
+
+import org.junit.jupiter.api.Test;
+import org.openepics.names.rest.beans.Status;
+import org.openepics.names.rest.beans.Type;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * Unit tests for StructureElement class.
+ *
+ * @author Lars Johansson
+ *
+ * @see StructureElement
+ */
+class StructureElementTest {
+
+    @Test
+    void equals() {
+        StructureElement se1 = null, se2 = null;
+        Date date = new Date();
+
+        se1 = new StructureElement(
+                UUID.fromString("a14a8565-de10-4026-97e3-ab129ffaba96"), Type.SYSTEM, UUID.fromString("05d52f1c-391e-41e3-a48f-dc8f36f8329b"), "name", "AA1",
+                "description", "comment",
+                "AA1", 2,
+                Status.APPROVED, true, false,
+                date, "test who");
+        se2 = new StructureElement(
+                UUID.fromString("a14a8565-de10-4026-97e3-ab129ffaba96"), Type.SYSTEM, UUID.fromString("05d52f1c-391e-41e3-a48f-dc8f36f8329b"), "name", "AA1",
+                "description", "comment",
+                "AA1", 2,
+                Status.APPROVED, true, false,
+                date, "test who");
+
+        assertEquals(se1, se2);
+    }
+
+    @Test
+    void equals2() {
+        ObjectMapper mapper = new ObjectMapper();
+        StructureElement se1 = null, se2 = null;
+        String json = "{\"uuid\": \"a14a8565-de10-4026-97e3-ab129ffaba96\", \"type\": \"SYSTEM\", \"parent\": \"05d52f1c-391e-41e3-a48f-dc8f36f8329b\", \"name\": \"name\", \"mnemonic\": \"AA1\", \"mnemonicPath\": \"AA1\", \"level\": \"2\", \"description\": \"description\", \"status\": \"APPROVED\", \"latest\": true, \"deleted\": false, \"when\": null, \"who\": \"test who\", \"comment\": \"comment\"};";
+
+        try {
+            se1 = mapper.readValue(json, StructureElement.class);
+            se2 = mapper.readValue(json, StructureElement.class);
+        } catch (JsonMappingException e) {
+            fail();
+        } catch (JsonProcessingException e) {
+            fail();
+        }
+
+        assertEquals(se1, se2);
+    }
+
+    @Test
+    void notEquals() {
+        StructureElement se1 = null, se2 = null;
+        Date date = new Date();
+
+        se1 = new StructureElement(
+                UUID.fromString("a14a8565-de10-4026-97e3-ab129ffaba96"), Type.SYSTEM, UUID.fromString("05d52f1c-391e-41e3-a48f-dc8f36f8329b"), "name", "AA1",
+                "description", "comment",
+                "AA1", 2,
+                Status.APPROVED, true, false,
+                date, "test who");
+        se2 = new StructureElement(
+                UUID.fromString("b14a8565-de10-4026-97e3-ab129ffaba96"), Type.SYSTEM, UUID.fromString("05d52f1c-391e-41e3-a48f-dc8f36f8329b"), "name", "AA1",
+                "description", "comment",
+                "AA1", 2,
+                Status.APPROVED, true, false,
+                date, "test who");
+
+        assertNotEquals(se1, se2);
+    }
+
+    @Test
+    void notEquals2() {
+        ObjectMapper mapper = new ObjectMapper();
+        StructureElement se1 = null, se2 = null;
+        String json  = "{\"uuid\": \"a14a8565-de10-4026-97e3-ab129ffaba96\", \"type\": \"SYSTEM\", \"parent\": \"05d52f1c-391e-41e3-a48f-dc8f36f8329b\", \"name\": \"name\", \"mnemonic\": \"AA1\", \"mnemonicPath\": \"AA1\", \"level\": \"2\", \"description\": \"description\", \"status\": \"APPROVED\", \"latest\": true, \"deleted\": false, \"when\": null, \"who\": \"test who\", \"comment\": \"comment\"};";
+        String json2 = "{\"uuid\": \"b14a8565-de10-4026-97e3-ab129ffaba96\", \"type\": \"SYSTEM\", \"parent\": \"05d52f1c-391e-41e3-a48f-dc8f36f8329b\", \"name\": \"name\", \"mnemonic\": \"AA1\", \"mnemonicPath\": \"AA1\", \"level\": \"2\", \"description\": \"description\", \"status\": \"APPROVED\", \"latest\": true, \"deleted\": false, \"when\": null, \"who\": \"test who\", \"comment\": \"comment\"};";
+
+        try {
+            se1 = mapper.readValue(json,  StructureElement.class);
+            se2 = mapper.readValue(json2, StructureElement.class);
+        } catch (JsonMappingException e) {
+            fail();
+        } catch (JsonProcessingException e) {
+            fail();
+        }
+
+        assertNotEquals(se1, se2);
+    }
+
+}