diff --git a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java
index 9aa6d6105d64920ca8d7036bddc4205ab03f4eac..f517546fdf42e7d906d86ac15d8853a29a6aa0ea 100644
--- a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java
+++ b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java
@@ -36,7 +36,6 @@ import org.openepics.names.repository.model.DeviceGroup;
 import org.openepics.names.repository.model.NameStructure;
 import org.openepics.names.repository.model.Persistable;
 import org.openepics.names.repository.model.Structure;
-import org.openepics.names.repository.model.System;
 import org.openepics.names.rest.beans.FieldStructure;
 import org.openepics.names.rest.beans.Status;
 import org.openepics.names.util.RepositoryUtil;
@@ -412,13 +411,11 @@ public class DeviceGroupRepository {
      * @param who who
      * @param orderBy order by
      * @param isAsc is ascending
-     * @param offset offset
-     * @param limit limit
      * @return list of device groups
      */
     public List<DeviceGroup> readDeviceGroupsHistory(
             String uuid, String parentUuid, String name, String mnemonic, String mnemonicEquivalence, String mnemonicPath, String description, String who,
-            FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) {
+            FieldStructure orderBy, Boolean isAsc) {
 
         // note
         //     use of function for mnemonic path
@@ -429,7 +426,7 @@ public class DeviceGroupRepository {
         // order
         //     orderBy, isAsc
         // paging
-        //     offset, limit
+        //     outside of method
 
         CriteriaBuilder cb = em.getCriteriaBuilder();
         CriteriaQuery<DeviceGroup> cq = cb.createQuery(DeviceGroup.class);
@@ -481,13 +478,7 @@ public class DeviceGroupRepository {
             }
         }
 
-        TypedQuery<DeviceGroup> query = em.createQuery(cq);
-        if (offset != null && limit != null) {
-            query.setFirstResult(offset * limit);
-            query.setMaxResults(limit);
-        }
-
-        return query.getResultList();
+        return em.createQuery(cq).getResultList();
     }
 
     /**
diff --git a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java
index c7c66ab40cf1e50591779668b6ba6ad023a00323..919866728d2e89890406de96eac0357af0ea7a9b 100644
--- a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java
+++ b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java
@@ -36,7 +36,6 @@ import org.openepics.names.repository.model.DeviceType;
 import org.openepics.names.repository.model.NameStructure;
 import org.openepics.names.repository.model.Persistable;
 import org.openepics.names.repository.model.Structure;
-import org.openepics.names.repository.model.System;
 import org.openepics.names.rest.beans.FieldStructure;
 import org.openepics.names.rest.beans.Status;
 import org.openepics.names.util.RepositoryUtil;
@@ -412,13 +411,11 @@ public class DeviceTypeRepository {
      * @param who who
      * @param orderBy order by
      * @param isAsc is ascending
-     * @param offset offset
-     * @param limit limit
      * @return list of device types
      */
     public List<DeviceType> readDeviceTypesHistory(
             String uuid, String parentUuid, String name, String mnemonic, String mnemonicEquivalence, String mnemonicPath, String description, String who,
-            FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) {
+            FieldStructure orderBy, Boolean isAsc) {
 
         // note
         //     use of function for mnemonic path
@@ -429,7 +426,7 @@ public class DeviceTypeRepository {
         // order
         //     orderBy, isAsc
         // paging
-        //     offset, limit
+        //     outside of method
 
         CriteriaBuilder cb = em.getCriteriaBuilder();
         CriteriaQuery<DeviceType> cq = cb.createQuery(DeviceType.class);
@@ -481,13 +478,7 @@ public class DeviceTypeRepository {
             }
         }
 
-        TypedQuery<DeviceType> query = em.createQuery(cq);
-        if (offset != null && limit != null) {
-            query.setFirstResult(offset * limit);
-            query.setMaxResults(limit);
-        }
-
-        return query.getResultList();
+        return em.createQuery(cq).getResultList();
     }
 
     /**
diff --git a/src/main/java/org/openepics/names/repository/DisciplineRepository.java b/src/main/java/org/openepics/names/repository/DisciplineRepository.java
index cd35c2f26128019c7bd9ce1f604d870839a5ff0a..10826f776b981fb3a2bb133553d1bbb912a4cec8 100644
--- a/src/main/java/org/openepics/names/repository/DisciplineRepository.java
+++ b/src/main/java/org/openepics/names/repository/DisciplineRepository.java
@@ -398,13 +398,11 @@ public class DisciplineRepository {
      * @param who who
      * @param orderBy order by
      * @param isAsc is ascending
-     * @param offset offset
-     * @param limit limit
      * @return list of disciplines
      */
     public List<Discipline> readDisciplinesHistory(
             String uuid, String name, String mnemonic, String mnemonicEquivalence, String mnemonicPath, String description, String who,
-            FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) {
+            FieldStructure orderBy, Boolean isAsc) {
 
         // note
         //     deleted - null
@@ -414,7 +412,7 @@ public class DisciplineRepository {
         // order
         //     orderBy, isAsc
         // paging
-        //     offset, limit
+        //     outside of method
 
         CriteriaBuilder cb = em.getCriteriaBuilder();
         CriteriaQuery<Discipline> cq = cb.createQuery(Discipline.class);
@@ -466,13 +464,7 @@ public class DisciplineRepository {
             }
         }
 
-        TypedQuery<Discipline> query = em.createQuery(cq);
-        if (offset != null && limit != null) {
-            query.setFirstResult(offset * limit);
-            query.setMaxResults(limit);
-        }
-
-        return query.getResultList();
+        return em.createQuery(cq).getResultList();
     }
 
     /**
diff --git a/src/main/java/org/openepics/names/repository/SubsystemRepository.java b/src/main/java/org/openepics/names/repository/SubsystemRepository.java
index c5642eb3354f1f5856c7c3c4e2ef06cc15f6583a..5a1e667f9170269acbb037af0bb084eab291f65f 100644
--- a/src/main/java/org/openepics/names/repository/SubsystemRepository.java
+++ b/src/main/java/org/openepics/names/repository/SubsystemRepository.java
@@ -36,7 +36,6 @@ import org.openepics.names.repository.model.NameStructure;
 import org.openepics.names.repository.model.Persistable;
 import org.openepics.names.repository.model.Structure;
 import org.openepics.names.repository.model.Subsystem;
-import org.openepics.names.repository.model.System;
 import org.openepics.names.rest.beans.FieldStructure;
 import org.openepics.names.rest.beans.Status;
 import org.openepics.names.util.RepositoryUtil;
@@ -412,13 +411,11 @@ public class SubsystemRepository {
      * @param who who
      * @param orderBy order by
      * @param isAsc is ascending
-     * @param offset offset
-     * @param limit limit
      * @return list of subsystems
      */
     public List<Subsystem> readSubsystemsHistory(
             String uuid, String parentUuid, String name, String mnemonic, String mnemonicEquivalence, String mnemonicPath, String description, String who,
-            FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) {
+            FieldStructure orderBy, Boolean isAsc) {
 
         // note
         //     use of function for mnemonic path
@@ -429,7 +426,7 @@ public class SubsystemRepository {
         // order
         //     orderBy, isAsc
         // paging
-        //     offset, limit
+        //     outside of method
 
         CriteriaBuilder cb = em.getCriteriaBuilder();
         CriteriaQuery<Subsystem> cq = cb.createQuery(Subsystem.class);
@@ -481,13 +478,7 @@ public class SubsystemRepository {
             }
         }
 
-        TypedQuery<Subsystem> query = em.createQuery(cq);
-        if (offset != null && limit != null) {
-            query.setFirstResult(offset * limit);
-            query.setMaxResults(limit);
-        }
-
-        return query.getResultList();
+        return em.createQuery(cq).getResultList();
     }
 
     /**
diff --git a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java
index 77add4946b76e1f6038b476d3b1d37f6b00d1398..cdce2192c106ca6e664537103f4d47eb2df1936b 100644
--- a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java
+++ b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java
@@ -395,13 +395,11 @@ public class SystemGroupRepository {
      * @param who who
      * @param orderBy order by
      * @param isAsc is ascending
-     * @param offset offset
-     * @param limit limit
      * @return list of system groups
      */
     public List<SystemGroup> readSystemGroupsHistory(
             String uuid, String name, String mnemonic, String mnemonicEquivalence, String mnemonicPath, String description, String who,
-            FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) {
+            FieldStructure orderBy, Boolean isAsc) {
 
         // note
         //     deleted - null
@@ -411,7 +409,7 @@ public class SystemGroupRepository {
         // order
         //     orderBy, isAsc
         // paging
-        //     offset, limit
+        //     outside of method
 
         CriteriaBuilder cb = em.getCriteriaBuilder();
         CriteriaQuery<SystemGroup> cq = cb.createQuery(SystemGroup.class);
@@ -463,13 +461,7 @@ public class SystemGroupRepository {
             }
         }
 
-        TypedQuery<SystemGroup> query = em.createQuery(cq);
-        if (offset != null && limit != null) {
-            query.setFirstResult(offset * limit);
-            query.setMaxResults(limit);
-        }
-
-        return query.getResultList();
+        return em.createQuery(cq).getResultList();
     }
 
     /**
diff --git a/src/main/java/org/openepics/names/repository/SystemRepository.java b/src/main/java/org/openepics/names/repository/SystemRepository.java
index 5ef2fe305d5c9ce80c235af3bae23354de7494de..f3ba1296288d496eb8c5530a0c26ca63d6fc0b8a 100644
--- a/src/main/java/org/openepics/names/repository/SystemRepository.java
+++ b/src/main/java/org/openepics/names/repository/SystemRepository.java
@@ -411,13 +411,11 @@ public class SystemRepository {
      * @param who who
      * @param orderBy order by
      * @param isAsc is ascending
-     * @param offset offset
-     * @param limit limit
      * @return list of systems
      */
     public List<System> readSystemsHistory(
             String uuid, String parentUuid, String name, String mnemonic, String mnemonicEquivalence, String mnemonicPath, String description, String who,
-            FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) {
+            FieldStructure orderBy, Boolean isAsc) {
 
         // note
         //     use of function for mnemonic path
@@ -428,7 +426,7 @@ public class SystemRepository {
         // order
         //     orderBy, isAsc
         // paging
-        //     offset, limit
+        //     outside of method
 
         CriteriaBuilder cb = em.getCriteriaBuilder();
         CriteriaQuery<System> cq = cb.createQuery(System.class);
@@ -480,13 +478,7 @@ public class SystemRepository {
             }
         }
 
-        TypedQuery<System> query = em.createQuery(cq);
-        if (offset != null && limit != null) {
-            query.setFirstResult(offset * limit);
-            query.setMaxResults(limit);
-        }
-
-        return query.getResultList();
+        return em.createQuery(cq).getResultList();
     }
 
     /**
diff --git a/src/main/java/org/openepics/names/service/StructuresService.java b/src/main/java/org/openepics/names/service/StructuresService.java
index 48c9d09a4ad7d066ce2bd13f3f836175b043033f..21b183505a25aab52dac946e9dd494c7ee18672c 100644
--- a/src/main/java/org/openepics/names/service/StructuresService.java
+++ b/src/main/java/org/openepics/names/service/StructuresService.java
@@ -270,10 +270,11 @@ public class StructuresService {
         //         -->
         //         actions to mitigate / handle
         //             have type as required parameter
-        //             have pagination for history in StructuresService and not in Repository classes
+        //             have pagination for history in StructuresService and not in Repository classes (!)
+        //                 after conversion to List<StructureElement>
         //             analyse and decide on sorting for history
 
-        final List<StructureElement> structureElements = Lists.newArrayList();
+        List<StructureElement> structureElements = Lists.newArrayList();
         Long totalCount = 0L;
 
         // systemgroup and discipline do not have parent uuid
@@ -281,7 +282,7 @@ public class StructuresService {
             if (Type.SYSTEMGROUP.equals(type)) {
                 List<SystemGroup> systemGroups = null;
                 if (Boolean.TRUE.equals(includeHistory)) {
-                    systemGroups = holderRepositories.systemGroupRepository().readSystemGroupsHistory(uuid, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc, offset, limit);
+                    systemGroups = holderRepositories.systemGroupRepository().readSystemGroupsHistory(uuid, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc);
                     totalCount = holderRepositories.systemGroupRepository().countSystemGroupsHistory(uuid, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who);
                 } else {
                     systemGroups = holderRepositories.systemGroupRepository().readSystemGroups(statuses, deleted, uuid, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, includeHistory, orderBy, isAsc, offset, limit);
@@ -291,7 +292,7 @@ public class StructuresService {
             } else if (Type.SYSTEM.equals(type)) {
                 List<System> systems = null;
                 if (Boolean.TRUE.equals(includeHistory)) {
-                    systems = holderRepositories.systemRepository().readSystemsHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc, offset, limit);
+                    systems = holderRepositories.systemRepository().readSystemsHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc);
                     totalCount = holderRepositories.systemRepository().countSystemsHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who);
                 } else {
                     systems = holderRepositories.systemRepository().readSystems(statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, includeHistory, orderBy, isAsc, offset, limit);
@@ -301,7 +302,7 @@ public class StructuresService {
             } else if (Type.SUBSYSTEM.equals(type)) {
                 List<Subsystem> subsystems = null;
                 if (Boolean.TRUE.equals(includeHistory)) {
-                    subsystems = holderRepositories.subsystemRepository().readSubsystemsHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc, offset, limit);
+                    subsystems = holderRepositories.subsystemRepository().readSubsystemsHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc);
                     totalCount = holderRepositories.subsystemRepository().countSubsystemsHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who);
                 } else {
                     subsystems = holderRepositories.subsystemRepository().readSubsystems(statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, includeHistory, orderBy, isAsc, offset, limit);
@@ -311,7 +312,7 @@ public class StructuresService {
             } else if (Type.DISCIPLINE.equals(type)) {
                 List<Discipline> disciplines = null;
                 if (Boolean.TRUE.equals(includeHistory)) {
-                    disciplines = holderRepositories.disciplineRepository().readDisciplinesHistory(uuid, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc, offset, limit);
+                    disciplines = holderRepositories.disciplineRepository().readDisciplinesHistory(uuid, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc);
                     totalCount = holderRepositories.disciplineRepository().countDisciplinesHistory(uuid, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who);
                 } else {
                     disciplines = holderRepositories.disciplineRepository().readDisciplines(statuses, deleted, uuid, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, includeHistory, orderBy, isAsc, offset, limit);
@@ -321,7 +322,7 @@ public class StructuresService {
             } else if (Type.DEVICEGROUP.equals(type)) {
                 List<DeviceGroup> deviceGroups = null;
                 if (Boolean.TRUE.equals(includeHistory)) {
-                    deviceGroups = holderRepositories.deviceGroupRepository().readDeviceGroupsHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc, offset, limit);
+                    deviceGroups = holderRepositories.deviceGroupRepository().readDeviceGroupsHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc);
                     totalCount = holderRepositories.deviceGroupRepository().countDeviceGroupsHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who);
                 } else {
                     deviceGroups = holderRepositories.deviceGroupRepository().readDeviceGroups(statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, includeHistory, orderBy, isAsc, offset, limit);
@@ -331,7 +332,7 @@ public class StructuresService {
             } else if (Type.DEVICETYPE.equals(type)) {
                 List<DeviceType> deviceTypes = null;
                 if (Boolean.TRUE.equals(includeHistory)) {
-                    deviceTypes = holderRepositories.deviceTypeRepository().readDeviceTypesHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc, offset, limit);
+                    deviceTypes = holderRepositories.deviceTypeRepository().readDeviceTypesHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, orderBy, isAsc);
                     totalCount = holderRepositories.deviceTypeRepository().countDeviceTypesHistory(uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who);
                 } else {
                     deviceTypes = holderRepositories.deviceTypeRepository().readDeviceTypes(statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description, who, includeHistory, orderBy, isAsc, offset, limit);
@@ -339,17 +340,37 @@ public class StructuresService {
                 }
                 structureElements.addAll(StructureElementUtil.getStructureElementsForDeviceTypes(deviceTypes, holderStructure, structureChoice));
             }
+
+            // pagination for history
+            if (Boolean.TRUE.equals(includeHistory)) {
+                totalCount = Long.valueOf(structureElements.size());
+                structureElements = paginate(structureElements, offset, limit);
+            }
         }
 
         ResponsePageStructureElements response = new ResponsePageStructureElements(structureElements, totalCount, structureElements.size(), offset, limit);
+        int numberElements = structureElements.size();
         LOGGER.log(Level.FINE,
                 () -> MessageFormat.format(
                         TextUtil.DESCRIPTION_NUMBER_ELEMENTS,
                         TextUtil.READ_STRUCTURES,
-                        structureElements.size()));
+                        numberElements));
         return response;
     }
 
+    private List<StructureElement> paginate(List<StructureElement> list, Integer offset, Integer limit) {
+        // intended only for pagination for history of structure elements
+        List<StructureElement> listPagination = Lists.newArrayList();
+        int offsetItems = offset * limit;
+        int availableItems = list.size() - offsetItems;
+        if (availableItems > 0) {
+            for (int i = offsetItems; i < Math.min(offsetItems+availableItems, offsetItems+limit); i++) {
+                listPagination.add(list.get(i));
+            }
+        }
+        return listPagination;
+    }
+
     public ResponsePageStructureElements readStructuresChildren(String uuid, Type type,
             Status[] statuses, Boolean deleted, String name, String mnemonic, String mnemonicEquivalence, String mnemonicPath, String description, String who,
             FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) {
diff --git a/src/test/java/org/openepics/names/docker/NamesIT.java b/src/test/java/org/openepics/names/docker/NamesIT.java
index 5fda2dea5d04e569616e30b538f7dd6a62bf3dc4..9b4dc22c8daf34f1a3ac62e39b282f647bd84a38 100644
--- a/src/test/java/org/openepics/names/docker/NamesIT.java
+++ b/src/test/java/org/openepics/names/docker/NamesIT.java
@@ -978,6 +978,10 @@ class NamesIT {
             // read & search
             //     deleted, uuid, name, nameEquivalence, systemStructure, deviceStructure, index, description
             //     combination
+            //     pagination
+            //         page, pageSize
+            //         default pageSize 100
+
             ITUtilNameElement.assertRead("", 13, -1);
 
             ITUtilNameElement.assertRead("?deleted=false",                    11, -1);
@@ -1021,7 +1025,16 @@ class NamesIT {
             ITUtilNameElement.assertRead("?who=asdf",                          0);
             ITUtilNameElement.assertRead("?who=%asdf%",                        0);
 
-            ITUtilNameElement.assertRead("?nameEquivalence=RFQ-10%&deviceStructure=EMR-FS", 8);
+            ITUtilNameElement.assertRead("?nameEquivalence=RFQ-10%&deviceStructure=EMR-FS",              8);
+
+            ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=0&pageSize=100",                  8);
+            ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=1&pageSize=100",                  0);
+            ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=0&pageSize=8",                    8);
+            ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=1&pageSize=8",                    0);
+            ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=0&pageSize=3",                    3);
+            ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=1&pageSize=3",                    3);
+            ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=2&pageSize=3",                    2);
+            ITUtilNameElement.assertRead("?deviceStructure=EMR-FS&page=3&pageSize=3",                    0);
 
             // name or uuid
             //     /{name}
@@ -1074,7 +1087,16 @@ class NamesIT {
             ITUtilNameElement.assertRead("/history?description=updated description%",   3, -1);
             ITUtilNameElement.assertRead("/history?who=test%",                         17, -1);
 
-            ITUtilNameElement.assertRead("/history?uuid=" + uuid.toString() + "&description=updated%", 3);
+            ITUtilNameElement.assertRead("/history?uuid=" + uuid.toString() + "&description=updated%",   3);
+
+            ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=0&pageSize=100",         12);
+            ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=1&pageSize=100",          0);
+            ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=0&pageSize=12",          12);
+            ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=1&pageSize=12",           0);
+            ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=0&pageSize=5",            5);
+            ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=1&pageSize=5",            5);
+            ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=2&pageSize=5",            2);
+            ITUtilNameElement.assertRead("/history?deviceStructure=EMR-FS&page=3&pageSize=5",            0);
         } 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 167728ef6aa726503caf8800308126fb2706fdac..240a5bc0c145e03e4a9f9290bb2d62c22a187c86 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
@@ -1897,6 +1897,10 @@ class StructuresDeviceGroupIT {
             //     /{type}
             //     type, statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
             //     combination
+            //     pagination
+            //         page, pageSize
+            //         default pageSize 100
+
             ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2",                                                  30);
             ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&mnemonicPath=Di2",                                  5);
             ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=APPROVED&mnemonicPath=Di2",                                20);
@@ -1955,6 +1959,15 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/DEVICEGROUP?who=asdf",                              0);
             ITUtilStructureElement.assertRead("/DEVICEGROUP?who=%asdf%",                            0);
 
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=100",                30);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=1&pageSize=100",                 0);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=30",                 30);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=1&pageSize=30",                  0);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=12",                 12);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=1&pageSize=12",                 12);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=2&pageSize=12",                  6);
+            ITUtilStructureElement.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=3&pageSize=12",                  0);
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -1995,15 +2008,24 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&uuid=" + discipline2Uuid.toString(),      0);
             ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&parent=" + uuid.toString(),               0);
             ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&parent=" + disciplineUuid.toString(),     0, -1);
-            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&parent=" + discipline2Uuid.toString(),  110);
-            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&name=na%",                              110, -1);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&parent=" + discipline2Uuid.toString(),  100);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&name=na%",                              100, -1);
             ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&mnemonic=AF_",                            0);
             ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&mnemonicEquivalence=_A_",                 0);
             ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%",                    40);
-            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&who=%wh%",                              110, -1);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&who=%wh%",                              100, -1);
 
             ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&uuid=" + uuid2.toString() + "&description=more%",       8);
 
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=0&pageSize=100",              40);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=1&pageSize=100",               0);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=0&pageSize=40",               40);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=1&pageSize=40",                0);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=0&pageSize=15",               15);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=1&pageSize=15",               15);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=2&pageSize=15",               10);
+            ITUtilStructureElement.assertRead("/history?type=DEVICEGROUP&description=%other%&page=3&pageSize=15",                0);
+
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di2", Boolean.FALSE);
         } catch (Exception e) {
             fail();
diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
index 7e98568b7fd34bc00c1c474d9dc5c82b1cd02e09..a79869abdb5b605d24b48b9b7e7a7dabe0d8cc25 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
@@ -1905,6 +1905,10 @@ class StructuresDeviceTypeIT {
             //     /{type}
             //     type, statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
             //     combination
+            //     pagination
+            //         page, pageSize
+            //         default pageSize 100
+
             ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&mnemonic=A__",                                 10);
             ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=APPROVED&mnemonic=A__",                                20);
@@ -1965,6 +1969,15 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/DEVICETYPE?who=asdf",                              0);
             ITUtilStructureElement.assertRead("/DEVICETYPE?who=%asdf%",                            0);
 
+            ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=100",                    45);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=1&pageSize=100",                     0);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=45",                     45);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=1&pageSize=45",                      0);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=20",                     20);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=1&pageSize=20",                     20);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=2&pageSize=20",                      5);
+            ITUtilStructureElement.assertRead("/DEVICETYPE?mnemonic=A__&page=3&pageSize=20",                      0);
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -2015,16 +2028,25 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&uuid=" + disciplineUuid.toString(),       0);
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&parent=" + uuid.toString(),               0);
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&parent=" + uuid2.toString(),              0);
-            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&parent=" + deviceGroupUuid.toString(),  110, -1);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&parent=" + deviceGroupUuid.toString(),  100, -1);
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&parent=" + disciplineUuid.toString(),     0);
-            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&name=na%",                              110, -1);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&name=na%",                              100, -1);
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_",                           20);
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonicEquivalence=_A_",                10);
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&description=%other%",                    40);
-            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&who=%wh%",                              110, -1);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&who=%wh%",                              100, -1);
 
             ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&uuid=" + uuid2.toString() + "&description=more%",   8);
 
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=100",       20);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=1&pageSize=100",        0);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=20",        20);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=1&pageSize=20",         0);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=0&pageSize=8",          8);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=1&pageSize=8",          8);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=2&pageSize=8",          4);
+            ITUtilStructureElement.assertRead("/history?type=DEVICETYPE&mnemonic=AF_&page=3&pageSize=8",          0);
+
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA2", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA3", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
index 58b939ddd556541a88582578ed58f2028b6e8c2b..6a07a4a8052dbac10728084b5546e5990df17d04 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
@@ -1803,6 +1803,10 @@ class StructuresDisciplineIT {
             //     /{type}
             //     type, statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
             //     combination
+            //     pagination
+            //         page, pageSize
+            //         default pageSize 100
+
             ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&mnemonic=A__",                                 10);
             ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=APPROVED&mnemonic=A__",                                20);
@@ -1860,6 +1864,15 @@ class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/DISCIPLINE?who=asdf",                       0);
             ITUtilStructureElement.assertRead("/DISCIPLINE?who=%asdf%",                     0);
 
+            ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=100",               45);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=1&pageSize=100",                0);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=45",                45);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=1&pageSize=45",                 0);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=20",                20);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=1&pageSize=20",                20);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=2&pageSize=20",                 5);
+            ITUtilStructureElement.assertRead("/DISCIPLINE?mnemonic=A__&page=3&pageSize=20",                 0);
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -1894,14 +1907,23 @@ class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&parent=" + uuid.toString(),          0);
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&parent=" + uuid2.toString(),         0);
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&parent=" + uuidRandom.toString(),    0);
-            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&name=na%",                         110, -1);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&name=na%",                         100, -1);
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_",                      20);
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonicEquivalence=_A_",           10);
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&description=%other%",               40);
-            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&who=%wh%",                         110, -1);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&who=%wh%",                         100, -1);
 
             ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&uuid=" + uuid2.toString() + "&description=more%",   8);
 
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=100",  20);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=1&pageSize=100",   0);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=20",   20);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=1&pageSize=20",    0);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=0&pageSize=8",     8);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=1&pageSize=8",     8);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=2&pageSize=8",     4);
+            ITUtilStructureElement.assertRead("/history?type=DISCIPLINE&mnemonic=AF_&page=3&pageSize=8",     0);
+
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA2", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA3", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
index 6e0f47129bad354f08e5c03baef0a75d43700a9a..f605160fd9e84089752f235053653a0dec113835 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
@@ -1953,6 +1953,10 @@ class StructuresSubsystemIT {
             //     /{type}
             //     type, statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
             //     combination
+            //     pagination
+            //         page, pageSize
+            //         default pageSize 100
+
             ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&mnemonic=A__",                                 10);
             ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=APPROVED&mnemonic=A__",                                20);
@@ -2013,6 +2017,15 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/SUBSYSTEM?who=asdf",                              0);
             ITUtilStructureElement.assertRead("/SUBSYSTEM?who=%asdf%",                            0);
 
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=100",                    45);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=1&pageSize=100",                     0);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=45",                     45);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=1&pageSize=45",                      0);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=20",                     20);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=1&pageSize=20",                     20);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=2&pageSize=20",                      5);
+            ITUtilStructureElement.assertRead("/SUBSYSTEM?mnemonic=A__&page=3&pageSize=20",                      0);
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -2073,16 +2086,25 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&uuid=" + systemGroupUuid.toString(),      0);
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&parent=" + uuid.toString(),               0);
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&parent=" + uuid2.toString(),              0);
-            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&parent=" + systemUuid.toString(),       110, -1);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&parent=" + systemUuid.toString(),       100, -1);
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&parent=" + systemGroupUuid.toString(),    0);
-            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&name=na%",                              110, -1);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&name=na%",                              100, -1);
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_",                           20);
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonicEquivalence=_A_",                10);
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&description=%other%",                    40);
-            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&who=%wh%",                              110, -1);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&who=%wh%",                              100, -1);
 
             ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&uuid=" + uuid2.toString() + "&description=more%",   8);
 
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=100",       20);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=1&pageSize=100",        0);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=20",        20);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=1&pageSize=20",         0);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=0&pageSize=8",          8);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=1&pageSize=8",          8);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=2&pageSize=8",          4);
+            ITUtilStructureElement.assertRead("/history?type=SUBSYSTEM&mnemonic=AF_&page=3&pageSize=8",          0);
+
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA2", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA3", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
index b2ec67a6950d575546b7790234bd6e102cf651d3..d3c6d6bc2aed0206c18993b1f10f59e19b33a23a 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
@@ -1865,6 +1865,10 @@ class StructuresSystemGroupIT {
             //     /{type}
             //     type, statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
             //     combination
+            //     pagination
+            //         page, pageSize
+            //         default pageSize 100
+
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&mnemonic=A__",                                 10);
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=APPROVED&mnemonic=A__",                                20);
@@ -1922,6 +1926,20 @@ class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?who=asdf",                       0);
             ITUtilStructureElement.assertRead("/SYSTEMGROUP?who=%asdf%",                     0);
 
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=100",               45);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=1&pageSize=100",                0);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=45",                45);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=1&pageSize=45",                 0);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=20",                20);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=1&pageSize=20",                20);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=2&pageSize=20",                 5);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?mnemonic=A__&page=3&pageSize=20",                 0);
+
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=12",  12);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=1&pageSize=12",  12);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=2&pageSize=12",   6);
+            ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=12",   0);
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -1956,13 +1974,22 @@ class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&parent=" + uuid.toString(),          0);
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&parent=" + uuid2.toString(),         0);
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&parent=" + uuidRandom.toString(),    0);
-            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&name=na%",                         110, -1);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&name=na%",                         100, -1);
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_",                      20);
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonicEquivalence=_A_",           10);
             ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&description=%other%",               40);
-            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&who=%wh%",                         110, -1);
-
-            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&uuid=" + uuid2.toString() + "&description=more%",   8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&who=%wh%",                         100, -1);
+
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&uuid=" + uuid2.toString() + "&description=more%",         8);
+
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=100",  20);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=1&pageSize=100",   0);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=20",   20);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=1&pageSize=20",    0);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=0&pageSize=8",     8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=1&pageSize=8",     8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=2&pageSize=8",     4);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEMGROUP&mnemonic=AF_&page=3&pageSize=8",     0);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA1", Boolean.TRUE);
             ITUtilStructureElement.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 27b4dc6d552a0bf827cff31218245a20d3f1e067..6438d2f202340d0e09b4761dff6a368e26610a9e 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
@@ -1886,6 +1886,10 @@ class StructuresSystemIT {
             //     /{type}
             //     type, statuses, deleted, uuid, parent, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
             //     combination
+            //     pagination
+            //         page, pageSize
+            //         default pageSize 100
+
             ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__",                                                  45);
             ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&mnemonic=A__",                                 10);
             ITUtilStructureElement.assertRead("/SYSTEM?statuses=APPROVED&mnemonic=A__",                                20);
@@ -1944,6 +1948,15 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/SYSTEM?who=asdf",                                 0);
             ITUtilStructureElement.assertRead("/SYSTEM?who=%asdf%",                               0);
 
+            ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=100",                       45);
+            ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=1&pageSize=100",                        0);
+            ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=45",                        45);
+            ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=1&pageSize=45",                         0);
+            ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=20",                        20);
+            ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=1&pageSize=20",                        20);
+            ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=2&pageSize=20",                         5);
+            ITUtilStructureElement.assertRead("/SYSTEM?mnemonic=A__&page=3&pageSize=20",                         0);
+
             // children
             //     /children/{uuid}
             //     uuid, type, statuses, deleted, name, mnemonic, mnemonicEquivalence, mnemonicPath, description
@@ -1986,15 +1999,24 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&uuid=" + systemGroupUuid.toString(),         0);
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&parent=" + uuid.toString(),                  0);
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&parent=" + uuid2.toString(),                 0);
-            ITUtilStructureElement.assertRead("/history?type=SYSTEM&parent=" + systemGroupUuid.toString(),     110, -1);
-            ITUtilStructureElement.assertRead("/history?type=SYSTEM&name=na%",                                 110, -1);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&parent=" + systemGroupUuid.toString(),     100, -1);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&name=na%",                                 100, -1);
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_",                              20);
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonicEquivalence=_A_",                   10);
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&description=%other%",                       40);
-            ITUtilStructureElement.assertRead("/history?type=SYSTEM&who=%wh%",                                 110, -1);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&who=%wh%",                                 100, -1);
 
             ITUtilStructureElement.assertRead("/history?type=SYSTEM&uuid=" + uuid2.toString() + "&description=more%",   8);
 
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=0&pageSize=100",          20);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=1&pageSize=100",           0);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=0&pageSize=20",           20);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=1&pageSize=20",            0);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=0&pageSize=8",             8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=1&pageSize=8",             8);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=2&pageSize=8",             4);
+            ITUtilStructureElement.assertRead("/history?type=SYSTEM&mnemonic=AF_&page=3&pageSize=8",             0);
+
             ITUtilStructureElement.assertExists(Type.SYSTEM, "AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "AA2", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "AA3", Boolean.TRUE);