From 008c00cb43ddac9c1275d9507f6aa545aed35f04 Mon Sep 17 00:00:00 2001
From: Lars Johansson <lars.johansson@ess.eu>
Date: Thu, 26 Oct 2023 10:15:40 +0200
Subject: [PATCH] Add integration tests

---
 .../org/openepics/names/docker/NamesIT.java   | 221 +++++++++++++++++-
 .../names/docker/StructuresDeviceGroupIT.java | 136 ++++++++++-
 .../names/docker/StructuresDeviceTypeIT.java  | 136 ++++++++++-
 .../names/docker/StructuresDisciplineIT.java  | 136 ++++++++++-
 .../names/docker/StructuresSubsystemIT.java   | 136 ++++++++++-
 .../names/docker/StructuresSystemGroupIT.java | 138 ++++++++++-
 .../names/docker/StructuresSystemIT.java      | 136 ++++++++++-
 7 files changed, 969 insertions(+), 70 deletions(-)

diff --git a/src/test/java/org/openepics/names/docker/NamesIT.java b/src/test/java/org/openepics/names/docker/NamesIT.java
index 1096d981..343c7bde 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 8faf1512..76d86d98 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 27b7a4fc..606e4df1 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 f71458df..2cbbf0c7 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 06343408..9341827a 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 0d4b5e2e..5ea922b5 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 2747fdaf..48ccdc8a 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);
-- 
GitLab