diff --git a/src/test/java/org/openepics/names/docker/NamesIT.java b/src/test/java/org/openepics/names/docker/NamesIT.java
index 1096d9810832dd0f586820b526930c7f294853ee..343c7bdeb915dce15acf234032656608be89ffaf 100644
--- a/src/test/java/org/openepics/names/docker/NamesIT.java
+++ b/src/test/java/org/openepics/names/docker/NamesIT.java
@@ -20,6 +20,7 @@ package org.openepics.names.docker;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
@@ -234,6 +235,7 @@ class NamesIT {
             NameElementCommand nameElementCommand = null;
             NameElement createdNameElement = null;
             StructureElementCommandConfirm structureElementCommandConfirm = null;
+            ResponsePageNameElements response, response2 = null;
 
             nameElementCommand = new NameElementCommand(
                     null, subsystemN1U1, deviceTypeRFA, "071",
@@ -342,6 +344,97 @@ class NamesIT {
             ITUtilNames.assertRead("/legacy?name=%EMR%",  1);
             ITUtilNames.assertRead("/legacy?name=%FS%",   0);
 
+            // order by
+            response  = ITUtilNames.assertRead("/legacy?orderBy=UUID&isAsc=true");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            response  = ITUtilNames.assertRead("/legacy?orderBy=UUID&isAsc=false");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=UUID&isAsc=true");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+
+            response  = ITUtilNames.assertRead("/legacy?orderBy=NAME&isAsc=true");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            response  = ITUtilNames.assertRead("/legacy?orderBy=NAME&isAsc=false");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=NAME&isAsc=true");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+
+            response  = ITUtilNames.assertRead("/legacy?orderBy=SYSTEMSTRUCTURE&isAsc=true");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=SYSTEMSTRUCTURE&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getSystemStructure(),  response2.getList().get(response2.getList().size()-1).getSystemStructure());
+            response  = ITUtilNames.assertRead("/legacy?orderBy=SYSTEMSTRUCTURE&isAsc=false");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=SYSTEMSTRUCTURE&isAsc=true");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getSystemStructure(),  response2.getList().get(response2.getList().size()-1).getSystemStructure());
+
+            response  = ITUtilNames.assertRead("/legacy?orderBy=DEVICESTRUCTURE&isAsc=true");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=DEVICESTRUCTURE&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDeviceStructure(),  response2.getList().get(response2.getList().size()-1).getDeviceStructure());
+            response  = ITUtilNames.assertRead("/legacy?orderBy=DEVICESTRUCTURE&isAsc=false");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=DEVICESTRUCTURE&isAsc=true");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDeviceStructure(),  response2.getList().get(response2.getList().size()-1).getDeviceStructure());
+
+            response  = ITUtilNames.assertRead("/legacy?orderBy=INDEX&isAsc=true");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=INDEX&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getIndex(),  response2.getList().get(response2.getList().size()-1).getIndex());
+            response  = ITUtilNames.assertRead("/legacy?orderBy=INDEX&isAsc=false");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=INDEX&isAsc=true");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getIndex(),  response2.getList().get(response2.getList().size()-1).getIndex());
+
+            response  = ITUtilNames.assertRead("/legacy?orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            response  = ITUtilNames.assertRead("/legacy?orderBy=DESCRIPTION&isAsc=false");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=DESCRIPTION&isAsc=true");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+
+            response  = ITUtilNames.assertRead("/legacy?orderBy=WHEN&isAsc=true");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=WHEN&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+            response  = ITUtilNames.assertRead("/legacy?orderBy=WHEN&isAsc=false");
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=WHEN&isAsc=true");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+
+            // pagination
+            ITUtilNames.assertRead("/legacy?page=0&pageSize=1",         1);
+            ITUtilNames.assertRead("/legacy?page=1&pageSize=1",         1);
+            ITUtilNames.assertRead("/legacy?page=2&pageSize=1",         0);
+
+            // order by, pagination
+            response  = ITUtilNames.assertRead("/legacy?orderBy=WHEN&isAsc=true&page=0&pageSize=1",       1);
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=WHEN&isAsc=false&page=1&pageSize=1",      1);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+            response  = ITUtilNames.assertRead("/legacy?orderBy=WHEN&isAsc=false&page=0&pageSize=1",      1);
+            response2 = ITUtilNames.assertRead("/legacy?orderBy=WHEN&isAsc=true&page=1&pageSize=1",       1);
+            assertEquals(response.getList().get(0).getWhen(),  response2.getList().get(response2.getList().size()-1).getWhen());
+
             ITUtilNames.assertDelete(nameElementCommandConfirm);
 
             ITUtilNames.assertExists("RFQ-N1U1:EMR-RFA-071", Boolean.FALSE);
@@ -1055,6 +1148,59 @@ class NamesIT {
 
             ITUtilNames.assertRead("?nameEquivalence=RFQ-10%&deviceStructure=EMR-FS",   8);
 
+            // order by
+            //     avoid
+            //         NAMEEQUIVALENCE - not of interest
+            response  = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=UUID&isAsc=true");
+            response2 = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=NAME&isAsc=true");
+            response2 = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=SYSTEMSTRUCTURE&isAsc=true");
+            response2 = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=SYSTEMSTRUCTURE&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getSystemStructure(),  response2.getList().get(response2.getList().size()-1).getSystemStructure());
+            assertEquals(response2.getList().get(0).getSystemStructure(),  response.getList().get(response.getList().size()-1).getSystemStructure());
+
+            response  = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=DEVICESTRUCTURE&isAsc=true");
+            response2 = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=DEVICESTRUCTURE&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDeviceStructure(),  response2.getList().get(response2.getList().size()-1).getDeviceStructure());
+            assertEquals(response2.getList().get(0).getDeviceStructure(),  response.getList().get(response.getList().size()-1).getDeviceStructure());
+
+            response  = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=INDEX&isAsc=true");
+            response2 = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=INDEX&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getIndex(),  response2.getList().get(response2.getList().size()-1).getIndex());
+            assertEquals(response2.getList().get(0).getIndex(),  response.getList().get(response.getList().size()-1).getIndex());
+
+            response  = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilNames.assertRead("?deviceStructure=EMR-FS&orderBy=WHEN&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getWhen().toString(),  response2.getList().get(response2.getList().size()-1).getWhen().toString());
+            assertEquals(response2.getList().get(0).getWhen().toString(),  response.getList().get(response.getList().size()-1).getWhen().toString());
+
+            // pagination
             ITUtilNames.assertRead("?deviceStructure=EMR-FS&page=0&pageSize=100",       8);
             ITUtilNames.assertRead("?deviceStructure=EMR-FS&page=1&pageSize=100",       0);
             ITUtilNames.assertRead("?deviceStructure=EMR-FS&page=0&pageSize=8",         8);
@@ -1064,11 +1210,12 @@ class NamesIT {
             ITUtilNames.assertRead("?deviceStructure=EMR-FS&page=2&pageSize=3",         2);
             ITUtilNames.assertRead("?deviceStructure=EMR-FS&page=3&pageSize=3",         0);
 
-            response  = ITUtilNames.assertRead("?index=00_&page=0&pageSize=3&orderBy=WHEN&isAsc=true",   3);
-            response2 = ITUtilNames.assertRead("?index=00_&page=2&pageSize=3&orderBy=WHEN&isAsc=false",  2);
+            // order by, pagination
+            response  = ITUtilNames.assertRead("?index=00_&orderBy=WHEN&isAsc=true&page=0&pageSize=3",   3);
+            response2 = ITUtilNames.assertRead("?index=00_&orderBy=WHEN&isAsc=false&page=2&pageSize=3",  2);
             assertEquals(response.getList().get(0),  response2.getList().get(response2.getList().size()-1));
-            response  = ITUtilNames.assertRead("?index=00_&page=0&pageSize=3&orderBy=WHEN&isAsc=false",  3);
-            response2 = ITUtilNames.assertRead("?index=00_&page=2&pageSize=3&orderBy=WHEN&isAsc=true",   2);
+            response  = ITUtilNames.assertRead("?index=00_&orderBy=WHEN&isAsc=false&page=0&pageSize=3",  3);
+            response2 = ITUtilNames.assertRead("?index=00_&orderBy=WHEN&isAsc=true&page=2&pageSize=3",   2);
             assertEquals(response.getList().get(0),  response2.getList().get(response2.getList().size()-1));
 
             // uuid or name
@@ -1120,6 +1267,59 @@ class NamesIT {
             ITUtilHistory.assertHistoryNames("?description=updated description%",       3, -1);
             ITUtilHistory.assertHistoryNames("?who=test%",                             17, -1);
 
+            //     order by
+            //         avoid
+            //             NAMEEQUIVALENCE - not of interest
+            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=UUID&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=NAME&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=SYSTEMSTRUCTURE&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=SYSTEMSTRUCTURE&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getSystemStructure(),  response2.getList().get(response2.getList().size()-1).getSystemStructure());
+            assertEquals(response2.getList().get(0).getSystemStructure(),  response.getList().get(response.getList().size()-1).getSystemStructure());
+
+            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=DEVICESTRUCTURE&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=DEVICESTRUCTURE&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDeviceStructure(),  response2.getList().get(response2.getList().size()-1).getDeviceStructure());
+            assertEquals(response2.getList().get(0).getDeviceStructure(),  response.getList().get(response.getList().size()-1).getDeviceStructure());
+
+            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=INDEX&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=INDEX&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getIndex(),  response2.getList().get(response2.getList().size()-1).getIndex());
+            assertEquals(response2.getList().get(0).getIndex(),  response.getList().get(response.getList().size()-1).getIndex());
+
+            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=WHEN&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getWhen().toString(),  response2.getList().get(response2.getList().size()-1).getWhen().toString());
+            assertEquals(response2.getList().get(0).getWhen().toString(),  response.getList().get(response.getList().size()-1).getWhen().toString());
+
+            //     pagination
             ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&page=0&pageSize=100",             12);
             ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&page=1&pageSize=100",              0);
             ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&page=0&pageSize=12",              12);
@@ -1129,12 +1329,13 @@ class NamesIT {
             ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&page=2&pageSize=5",                2);
             ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&page=3&pageSize=5",                0);
 
-            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&page=0&pageSize=5&orderBy=WHEN&isAsc=true",       5);
-            response2 = ITUtilHistory.assertHistoryNames("?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  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&page=0&pageSize=5&orderBy=WHEN&isAsc=false",      5);
-            response2 = ITUtilHistory.assertHistoryNames("?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());
+            //     order by, pagination
+            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=WHEN&isAsc=true&page=0&pageSize=5",       5);
+            response2 = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=WHEN&isAsc=false&page=2&pageSize=5",      2);
+            assertEquals(response.getList().get(0).getWhen().toString(),  response2.getList().get(response2.getList().size()-1).getWhen().toString());
+            response  = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=WHEN&isAsc=false&page=0&pageSize=5",      5);
+            response2 = ITUtilHistory.assertHistoryNames("?deviceStructure=EMR-FS&orderBy=WHEN&isAsc=true&page=2&pageSize=5",       2);
+            assertEquals(response.getList().get(0).getWhen().toString(),  response2.getList().get(response2.getList().size()-1).getWhen().toString());
         } 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 8faf15126b53903d357acf52e92745327297ce11..76d86d981824b9b465dfc43b590fb7aeba3f9c70 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
@@ -20,6 +20,7 @@ package org.openepics.names.docker;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.HttpURLConnection;
@@ -1993,6 +1994,55 @@ class StructuresDeviceGroupIT {
             ITUtilStructures.assertRead("/DEVICEGROUP?who=asdf",                              0);
             ITUtilStructures.assertRead("/DEVICEGROUP?who=%asdf%",                            0);
 
+            // order by
+            //     avoid
+            //         PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //         MNEMONICEQUIVALENCE - not of interest
+            //         MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //     use with care
+            //         WHEN                - different for requested/processed
+            response  = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=UUID&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=NAME&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICEGROUP?name=name&orderBy=WHEN&isAsc=false");
+            String value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            String value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            String value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            String value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            // pagination
             ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=100",                  30);
             ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=1&pageSize=100",                   0);
             ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=30",                   30);
@@ -2002,16 +2052,18 @@ class StructuresDeviceGroupIT {
             ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=2&pageSize=12",                    6);
             ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=3&pageSize=12",                    0);
 
+            // pagination
             ITUtilStructures.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=0&pageSize=12",         12);
             ITUtilStructures.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=1&pageSize=12",         12);
             ITUtilStructures.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=2&pageSize=12",          1);
             ITUtilStructures.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=3&pageSize=12",          0);
 
-            response  = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=12&orderBy=WHEN&isAsc=true",        12);
-            response2 = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=2&pageSize=12&orderBy=WHEN&isAsc=false",        6);
+            // order by, pagination
+            response  = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=true&page=0&pageSize=12",        12);
+            response2 = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=false&page=2&pageSize=12",        6);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
-            response  = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=12&orderBy=WHEN&isAsc=false",       12);
-            response2 = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=2&pageSize=12&orderBy=WHEN&isAsc=true",         6);
+            response  = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=false&page=0&pageSize=12",       12);
+            response2 = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=true&page=2&pageSize=12",         6);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
 
             // type and uuid
@@ -2063,6 +2115,55 @@ class StructuresDeviceGroupIT {
             ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%",                    40);
             ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&who=%wh%",                              100, -1);
 
+            //     order by
+            //         avoid
+            //             PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //             MNEMONICEQUIVALENCE - not of interest
+            //             MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //         use with care
+            //             WHEN                - different for requested/processed
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=UUID&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=NAME&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=WHEN&isAsc=false");
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            //     pagination
             ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&page=0&pageSize=100",              40);
             ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&page=1&pageSize=100",               0);
             ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&page=0&pageSize=40",               40);
@@ -2072,12 +2173,27 @@ class StructuresDeviceGroupIT {
             ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&page=2&pageSize=15",               10);
             ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&page=3&pageSize=15",                0);
 
-            ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&page=0&pageSize=15&orderBy=WHEN&isAsc=true",   15);
-            ITUtilHistory.assertHistoryStructures("?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());
-            ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&page=0&pageSize=15&orderBy=WHEN&isAsc=false",  15);
-            ITUtilHistory.assertHistoryStructures("?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());
+            //     order by, pagination
+            ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=WHEN&isAsc=true&page=0&pageSize=15",   15);
+            ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=WHEN&isAsc=false&page=2&pageSize=15",  10);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
+            ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=WHEN&isAsc=false&page=0&pageSize=15",  15);
+            ITUtilHistory.assertHistoryStructures("?type=DEVICEGROUP&description=%other%&orderBy=WHEN&isAsc=true&page=2&pageSize=15",   10);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
 
             ITUtilStructures.assertExists(Type.DEVICEGROUP, "Di2", Boolean.FALSE);
         } catch (Exception e) {
diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
index 27b7a4fc02dc32a25be474840c7a5f6446952fe1..606e4df1edf65633a88a0fe40c03192ee2180e0e 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
@@ -20,6 +20,7 @@ package org.openepics.names.docker;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.HttpURLConnection;
@@ -2002,6 +2003,55 @@ class StructuresDeviceTypeIT {
             ITUtilStructures.assertRead("/DEVICETYPE?who=asdf",                              0);
             ITUtilStructures.assertRead("/DEVICETYPE?who=%asdf%",                            0);
 
+            // order by
+            //     avoid
+            //         PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //         MNEMONICEQUIVALENCE - not of interest
+            //         MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //     use with care
+            //         WHEN                - different for requested/processed
+            response  = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            String value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            String value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            String value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            String value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            // pagination
             ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=100",     45);
             ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=1&pageSize=100",      0);
             ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=45",      45);
@@ -2011,16 +2061,18 @@ class StructuresDeviceTypeIT {
             ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=2&pageSize=20",       5);
             ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=3&pageSize=20",       0);
 
+            // pagination
             ITUtilStructures.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",      12);
             ITUtilStructures.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",      12);
             ITUtilStructures.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",       6);
             ITUtilStructures.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",       0);
 
-            response  = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",     20);
-            response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",     5);
+            // order by, pagination
+            response  = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20",     20);
+            response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20",     5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
-            response  = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",    20);
-            response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",      5);
+            response  = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20",    20);
+            response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20",      5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
 
             // type and uuid
@@ -2084,6 +2136,55 @@ class StructuresDeviceTypeIT {
             ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&description=%other%",                    40);
             ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&who=%wh%",                              100, -1);
 
+            //     order by
+            //         avoid
+            //             PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //             MNEMONICEQUIVALENCE - not of interest
+            //             MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //         use with care
+            //             WHEN                - different for requested/processed
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            //     pagination
             ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=100",       20);
             ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&page=1&pageSize=100",        0);
             ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=20",        20);
@@ -2093,12 +2194,27 @@ class StructuresDeviceTypeIT {
             ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&page=2&pageSize=8",          4);
             ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&page=3&pageSize=8",          0);
 
-            ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
-            ITUtilHistory.assertHistoryStructures("?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());
-            ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
-            ITUtilHistory.assertHistoryStructures("?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());
+            //     order by, pagination
+            ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=0&pageSize=8",    8);
+            ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=2&pageSize=8",   4);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
+            ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=0&pageSize=8",   8);
+            ITUtilHistory.assertHistoryStructures("?type=DEVICETYPE&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=2&pageSize=8",    4);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
 
             ITUtilStructures.assertExists(Type.DEVICETYPE, "Di-AA1", Boolean.TRUE);
             ITUtilStructures.assertExists(Type.DEVICETYPE, "Di-AA2", 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 f71458dfb07347f8035205445b1c481dd4a62cf3..2cbbf0c77c2d435f722ee96a5d1dc5dd158400d2 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
@@ -20,6 +20,7 @@ package org.openepics.names.docker;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.HttpURLConnection;
@@ -1898,6 +1899,55 @@ class StructuresDisciplineIT {
             ITUtilStructures.assertRead("/DISCIPLINE?who=asdf",                       0);
             ITUtilStructures.assertRead("/DISCIPLINE?who=%asdf%",                     0);
 
+            // order by
+            //     avoid
+            //         PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //         MNEMONICEQUIVALENCE - not of interest
+            //         MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //     use with care
+            //         WHEN                - different for requested/processed
+            response  = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            String value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            String value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            String value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            String value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            // pagination
             ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=100",                 45);
             ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=1&pageSize=100",                  0);
             ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=45",                  45);
@@ -1907,16 +1957,18 @@ class StructuresDisciplineIT {
             ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=2&pageSize=20",                   5);
             ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=3&pageSize=20",                   0);
 
+            // pagination
             ITUtilStructures.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",      12);
             ITUtilStructures.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",      12);
             ITUtilStructures.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",       6);
             ITUtilStructures.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",       0);
 
-            response  = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",     20);
-            response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",     5);
+            // order by, pagination
+            response  = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20",     20);
+            response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20",     5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
-            response  = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",    20);
-            response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",      5);
+            response  = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20",    20);
+            response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20",      5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
 
             // type and uuid
@@ -1962,6 +2014,55 @@ class StructuresDisciplineIT {
             ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&description=%other%",               40);
             ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&who=%wh%",                         100, -1);
 
+            //     order by
+            //         avoid
+            //             PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //             MNEMONICEQUIVALENCE - not of interest
+            //             MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //         use with care
+            //             WHEN                - different for requested/processed
+            response  = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            //     pagination
             ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=100",  20);
             ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&page=1&pageSize=100",   0);
             ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=20",   20);
@@ -1971,12 +2072,27 @@ class StructuresDisciplineIT {
             ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&page=2&pageSize=8",     4);
             ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&page=3&pageSize=8",     0);
 
-            ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
-            ITUtilHistory.assertHistoryStructures("?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());
-            ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
-            ITUtilHistory.assertHistoryStructures("?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());
+            //     order by, pagination
+            ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=0&pageSize=8",    8);
+            ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=2&pageSize=8",   4);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
+            ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=0&pageSize=8",   8);
+            ITUtilHistory.assertHistoryStructures("?type=DISCIPLINE&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=2&pageSize=8",    4);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
 
             ITUtilStructures.assertExists(Type.DISCIPLINE, "AA1", Boolean.TRUE);
             ITUtilStructures.assertExists(Type.DISCIPLINE, "AA2", 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 06343408574d4a5b43a3488a4290b8b64e8b8fbd..9341827a00c05a7d3792e34441e4a882ac0aa676 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
@@ -20,6 +20,7 @@ package org.openepics.names.docker;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.HttpURLConnection;
@@ -2050,6 +2051,55 @@ class StructuresSubsystemIT {
             ITUtilStructures.assertRead("/SUBSYSTEM?who=asdf",                              0);
             ITUtilStructures.assertRead("/SUBSYSTEM?who=%asdf%",                            0);
 
+            // order by
+            //     avoid
+            //         PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //         MNEMONICEQUIVALENCE - not of interest
+            //         MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //     use with care
+            //         WHEN                - different for requested/processed
+            response  = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            String value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            String value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            String value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            String value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            // pagination
             ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=100",     45);
             ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=1&pageSize=100",      0);
             ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=45",      45);
@@ -2059,16 +2109,18 @@ class StructuresSubsystemIT {
             ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=2&pageSize=20",       5);
             ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=3&pageSize=20",       0);
 
+            // pagination
             ITUtilStructures.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",      12);
             ITUtilStructures.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",      12);
             ITUtilStructures.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",       6);
             ITUtilStructures.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",       0);
 
-            response  = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",     20);
-            response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",     5);
+            // order by, pagination
+            response  = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20",     20);
+            response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20",     5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
-            response  = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",    20);
-            response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",      5);
+            response  = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20",    20);
+            response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20",      5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
 
             // type and uuid
@@ -2142,6 +2194,55 @@ class StructuresSubsystemIT {
             ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&description=%other%",                    40);
             ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&who=%wh%",                              100, -1);
 
+            //     order by
+            //         avoid
+            //             PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //             MNEMONICEQUIVALENCE - not of interest
+            //             MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //         use with care
+            //             WHEN                - different for requested/processed
+            response  = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            //     pagination
             ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=100",       20);
             ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&page=1&pageSize=100",        0);
             ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=20",        20);
@@ -2151,12 +2252,27 @@ class StructuresSubsystemIT {
             ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&page=2&pageSize=8",          4);
             ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&page=3&pageSize=8",          0);
 
-            ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
-            ITUtilHistory.assertHistoryStructures("?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());
-            ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
-            ITUtilHistory.assertHistoryStructures("?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());
+            //     order by, pagination
+            ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=0&pageSize=8",    8);
+            ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=2&pageSize=8",   4);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
+            ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=0&pageSize=8",   8);
+            ITUtilHistory.assertHistoryStructures("?type=SUBSYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=2&pageSize=8",    4);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
 
             ITUtilStructures.assertExists(Type.SUBSYSTEM, "Sys-AA1", Boolean.TRUE);
             ITUtilStructures.assertExists(Type.SUBSYSTEM, "Sys-AA2", 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 0d4b5e2e9af105d60111536de52ade0f83c50900..5ea922b5f3fef540ea183caf707b1222ef9dd842 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
@@ -21,6 +21,7 @@ package org.openepics.names.docker;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.HttpURLConnection;
@@ -1960,6 +1961,56 @@ class StructuresSystemGroupIT {
             ITUtilStructures.assertRead("/SYSTEMGROUP?who=asdf",                       0);
             ITUtilStructures.assertRead("/SYSTEMGROUP?who=%asdf%",                     0);
 
+            // order by
+            //     avoid
+            //         PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //         MNEMONICEQUIVALENCE - not of interest
+            //         MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //                               may be unavailable for SYSTEMGROUP
+            //     use with care
+            //         WHEN                - different for requested/processed
+            response  = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            String value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            String value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            String value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            String value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            // pagination
             ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=100",                 45);
             ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=1&pageSize=100",                  0);
             ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=45",                  45);
@@ -1969,16 +2020,18 @@ class StructuresSystemGroupIT {
             ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=2&pageSize=20",                   5);
             ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=3&pageSize=20",                   0);
 
+            // pagination
             ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",      12);
             ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",      12);
             ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",       6);
             ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",       0);
 
-            response  = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",     20);
-            response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",     5);
+            // order by, pagination
+            response  = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20",     20);
+            response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20",     5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
-            response  = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",    20);
-            response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",      5);
+            response  = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20",    20);
+            response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20",      5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
 
             // type and uuid
@@ -2024,6 +2077,56 @@ class StructuresSystemGroupIT {
             ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&description=%other%",               40);
             ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&who=%wh%",                         100, -1);
 
+            //     order by
+            //         avoid
+            //             PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //             MNEMONICEQUIVALENCE - not of interest
+            //             MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //                                   may be unavailable for SYSTEMGROUP
+            //         use with care
+            //             WHEN                - different for requested/processed
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            //     pagination
             ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=100",  20);
             ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&page=1&pageSize=100",   0);
             ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=20",   20);
@@ -2033,12 +2136,27 @@ class StructuresSystemGroupIT {
             ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&page=2&pageSize=8",     4);
             ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&page=3&pageSize=8",     0);
 
-            ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
-            ITUtilHistory.assertHistoryStructures("?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());
-            ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
-            ITUtilHistory.assertHistoryStructures("?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());
+            //     order by, pagination
+            ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=0&pageSize=8",    8);
+            ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=2&pageSize=8",   4);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
+            ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=0&pageSize=8",   8);
+            ITUtilHistory.assertHistoryStructures("?type=SYSTEMGROUP&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=2&pageSize=8",    4);
+            value0 = response.getList().get(0).getWhen().toString();
+            value1 = response.getList().get(1).getWhen().toString();
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen().toString();
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen().toString();
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
 
             ITUtilStructures.assertExists(Type.SYSTEMGROUP, "AA1", Boolean.TRUE);
             ITUtilStructures.assertExists(Type.SYSTEMGROUP, "AA2", 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 2747fdaf78b32e70cd599cef8d1bd538b4f64d71..48ccdc8a3871489107e95037cd01a73d3f762877 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
@@ -20,6 +20,7 @@ package org.openepics.names.docker;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.HttpURLConnection;
@@ -1982,6 +1983,55 @@ class StructuresSystemIT {
             ITUtilStructures.assertRead("/SYSTEM?who=asdf",                                 0);
             ITUtilStructures.assertRead("/SYSTEM?who=%asdf%",                               0);
 
+            // order by
+            //     avoid
+            //         PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //         MNEMONICEQUIVALENCE - not of interest
+            //         MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //     use with care
+            //         WHEN                - different for requested/processed
+            response  = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            String value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            String value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            String value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            String value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            // pagination
             ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=100",        45);
             ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=1&pageSize=100",         0);
             ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=45",         45);
@@ -1991,16 +2041,18 @@ class StructuresSystemIT {
             ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=2&pageSize=20",          5);
             ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=3&pageSize=20",          0);
 
+            // pagination
             ITUtilStructures.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",      12);
             ITUtilStructures.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",      12);
             ITUtilStructures.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",       6);
             ITUtilStructures.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",       0);
 
-            response  = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=true",     20);
-            response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=false",     5);
+            // order by, pagination
+            response  = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20",     20);
+            response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20",     5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
-            response  = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=20&orderBy=WHEN&isAsc=false",    20);
-            response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=2&pageSize=20&orderBy=WHEN&isAsc=true",      5);
+            response  = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20",    20);
+            response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20",      5);
             assertEquals(response.getList().get(0), response2.getList().get(response2.getList().size()-1));
 
             // type and uuid
@@ -2055,6 +2107,55 @@ class StructuresSystemIT {
             ITUtilHistory.assertHistoryStructures("?type=SYSTEM&description=%other%",                     40);
             ITUtilHistory.assertHistoryStructures("?type=SYSTEM&who=%wh%",                               100, -1);
 
+            //     order by
+            //         avoid
+            //             PARENT              - ambiguous, order on which parent field? uuid/name/mnemonic/...
+            //             MNEMONICEQUIVALENCE - not of interest
+            //             MNEMONICPATH        - different for requested/processed, not set for PENDING, ambiguous/not set for HISTORY
+            //         use with care
+            //             WHEN                - different for requested/processed
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=UUID&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=UUID&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getUuid(),  response2.getList().get(response2.getList().size()-1).getUuid());
+            assertEquals(response2.getList().get(0).getUuid(),  response.getList().get(response.getList().size()-1).getUuid());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=NAME&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=NAME&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getName(),  response2.getList().get(response2.getList().size()-1).getName());
+            assertEquals(response2.getList().get(0).getName(),  response.getList().get(response.getList().size()-1).getName());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=MNEMONIC&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=MNEMONIC&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getMnemonic(),  response2.getList().get(response2.getList().size()-1).getMnemonic());
+            assertEquals(response2.getList().get(0).getMnemonic(),  response.getList().get(response.getList().size()-1).getMnemonic());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=DESCRIPTION&isAsc=false");
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertEquals(response.getList().get(0).getDescription(),  response2.getList().get(response2.getList().size()-1).getDescription());
+            assertEquals(response2.getList().get(0).getDescription(),  response.getList().get(response.getList().size()-1).getDescription());
+
+            response  = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=true");
+            response2 = ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=false");
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(response.getList().size() > 0);
+            assertEquals(response.getList().size(),  response2.getList().size());
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
+
+            //     pagination
             ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&page=0&pageSize=100",        20);
             ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&page=1&pageSize=100",         0);
             ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&page=0&pageSize=20",         20);
@@ -2064,12 +2165,27 @@ class StructuresSystemIT {
             ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&page=2&pageSize=8",           4);
             ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&page=3&pageSize=8",          0);
 
-            ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=true",    8);
-            ITUtilHistory.assertHistoryStructures("?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());
-            ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&page=0&pageSize=8&orderBy=WHEN&isAsc=false",   8);
-            ITUtilHistory.assertHistoryStructures("?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());
+            //     order by, pagination
+            ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=0&pageSize=8",    8);
+            ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=2&pageSize=8",   4);
+            value0 = response.getList().get(0).getWhen() != null ? response.getList().get(0).getWhen().toString() : null;
+            value1 = response.getList().get(1).getWhen() != null ? response.getList().get(1).getWhen().toString() : null;
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen() != null ? response2.getList().get(response2.getList().size()-2).getWhen().toString() : null;
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen() != null ? response2.getList().get(response2.getList().size()-1).getWhen().toString() : null;
+            assertTrue(value0 != null && (value0.equals(value2) || value0.equals(value3))
+                    || value1 != null && (value1.equals(value2) || value1.equals(value3)));
+            assertTrue(value3 != null && (value3.equals(value0) || value3.equals(value1))
+                    || value2 != null && (value2.equals(value0) || value2.equals(value2)));
+            ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=false&page=0&pageSize=8",   8);
+            ITUtilHistory.assertHistoryStructures("?type=SYSTEM&mnemonic=AF_&orderBy=WHEN&isAsc=true&page=2&pageSize=8",    4);
+            value0 = response.getList().get(0).getWhen().toString();
+            value1 = response.getList().get(1).getWhen().toString();
+            value2 = response2.getList().get(response2.getList().size()-2).getWhen().toString();
+            value3 = response2.getList().get(response2.getList().size()-1).getWhen().toString();
+            assertTrue(value0 != null && (StringUtils.equals(value0, value2) || StringUtils.equals(value0, value3))
+                    || value1 != null && (StringUtils.equals(value1, value2) || StringUtils.equals(value1, value3)));
+            assertTrue(value3 != null && (StringUtils.equals(value3, value0) || StringUtils.equals(value3, value1))
+                    || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1)));
 
             ITUtilStructures.assertExists(Type.SYSTEM, "AA1", Boolean.TRUE);
             ITUtilStructures.assertExists(Type.SYSTEM, "AA2", Boolean.TRUE);