diff --git a/src/main/java/org/openepics/names/repository/tmp/ITmpAuditNameRepository.java b/src/main/java/org/openepics/names/repository/tmp/ITmpAuditNameRepository.java
index fec854fb66abb65c626fd8daa85f1836f3f0abe8..f753262f46f76dc2d0b9a781c58b16f9e8d46bb3 100644
--- a/src/main/java/org/openepics/names/repository/tmp/ITmpAuditNameRepository.java
+++ b/src/main/java/org/openepics/names/repository/tmp/ITmpAuditNameRepository.java
@@ -18,8 +18,12 @@
 
 package org.openepics.names.repository.tmp;
 
+import java.util.Date;
+import java.util.List;
+
 import org.openepics.names.repository.model.tmp.TmpAuditName;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 /**
@@ -30,4 +34,16 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface ITmpAuditNameRepository extends JpaRepository<TmpAuditName, Long> {
 
+    @Query("SELECT tan FROM TmpAuditName tan "
+            + "WHERE tan.uuid = ?1 "
+            + "AND tan.status = 'APPROVED' "
+            + "AND tan.auditId = (select max(tan2.auditId) from TmpAuditName tan2 where tan2.uuid = tan.uuid and tan2.auditId < ?2)")
+    TmpAuditName findPreviousByUuidAndAuditId(String uuid, Long id);
+
+    @Query("FROM TmpAuditName tan WHERE tan.requested >= ?1 AND tan.requested <= ?2")
+    List<TmpAuditName> findByRequestedBetween(Date from, Date to);
+
+    @Query("FROM TmpAuditName tan WHERE tan.uuid = ?1")
+    List<TmpAuditName> findByUuid(String uuid);
+
 }
diff --git a/src/main/java/org/openepics/names/repository/tmp/ITmpAuditStructureRepository.java b/src/main/java/org/openepics/names/repository/tmp/ITmpAuditStructureRepository.java
index dc24856264d71d4ed70f6df5170b53a23db8b7fd..18ff6f8d09310bea955fc8b5425d4c18c73fb508 100644
--- a/src/main/java/org/openepics/names/repository/tmp/ITmpAuditStructureRepository.java
+++ b/src/main/java/org/openepics/names/repository/tmp/ITmpAuditStructureRepository.java
@@ -20,6 +20,7 @@ package org.openepics.names.repository.tmp;
 
 import org.openepics.names.repository.model.tmp.TmpAuditStructure;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 /**
@@ -30,4 +31,11 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface ITmpAuditStructureRepository extends JpaRepository<TmpAuditStructure, Long> {
 
+    @Query("SELECT tas FROM TmpAuditStructure tas "
+            + "WHERE tas.auditTable = ?1 "
+            + "AND tas.uuid = ?2 "
+            + "AND tas.status = 'APPROVED' "
+            + "AND tas.auditId = (select max(tas2.auditId) from TmpAuditStructure tas2 where tas2.uuid = tas.uuid and tas2.auditId < ?3)")
+    TmpAuditStructure findPreviousByAuditTableAndUuidAndAuditId(String auditTable, String uuid, Long id);
+
 }
diff --git a/src/main/java/org/openepics/names/service/DeviceGroupService.java b/src/main/java/org/openepics/names/service/DeviceGroupService.java
index 26372b2ac72dfcaeee8592b42e13e9cc37765401..ebc4416758b707b44f35e0240ca1d0c2b403d809 100644
--- a/src/main/java/org/openepics/names/service/DeviceGroupService.java
+++ b/src/main/java/org/openepics/names/service/DeviceGroupService.java
@@ -34,6 +34,7 @@ import org.openepics.names.repository.model.DeviceType;
 import org.openepics.names.repository.model.tmp.TmpAuditStructure;
 import org.openepics.names.repository.model.tmp.TmpDeviceGroup;
 import org.openepics.names.repository.model.tmp.TmpDiscipline;
+import org.openepics.names.repository.tmp.ITmpAuditStructureRepository;
 import org.openepics.names.repository.tmp.ITmpDeviceGroupRepository;
 import org.openepics.names.repository.tmp.ITmpDisciplineRepository;
 import org.openepics.names.repository.tmp.TmpAuditStructureRepository;
@@ -47,6 +48,7 @@ import org.openepics.names.util.HolderTmpStructures;
 import org.openepics.names.util.StructureChoice;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureElementUtil;
+import org.openepics.names.util.StructureUtil;
 import org.openepics.names.util.TextUtil;
 import org.openepics.names.util.ValidateUtil;
 import org.openepics.names.util.notification.NotificationUtil;
@@ -73,6 +75,7 @@ public class DeviceGroupService {
     private DeviceGroupRepository deviceGroupRepository;
     private ITmpDisciplineRepository iTmpDisciplineRepository;
     private ITmpDeviceGroupRepository iTmpDeviceGroupRepository;
+    private ITmpAuditStructureRepository iTmpAuditStructureRepository;
     private TmpDeviceGroupRepository tmpDeviceGroupRepository;
     private TmpAuditStructureRepository tmpAuditStructureRepository;
 
@@ -84,6 +87,7 @@ public class DeviceGroupService {
             DeviceGroupRepository deviceGroupRepository,
             ITmpDisciplineRepository iTmpDisciplineRepository,
             ITmpDeviceGroupRepository iTmpDeviceGroupRepository,
+            ITmpAuditStructureRepository iTmpAuditStructureRepository,
             TmpDeviceGroupRepository tmpDeviceGroupRepository,
             TmpAuditStructureRepository tmpAuditStructureRepository) {
         this.deviceTypeService = deviceTypeService;
@@ -92,6 +96,7 @@ public class DeviceGroupService {
         this.deviceGroupRepository = deviceGroupRepository;
         this.iTmpDisciplineRepository = iTmpDisciplineRepository;
         this.iTmpDeviceGroupRepository = iTmpDeviceGroupRepository;
+        this.iTmpAuditStructureRepository = iTmpAuditStructureRepository;
         this.tmpDeviceGroupRepository = tmpDeviceGroupRepository;
         this.tmpAuditStructureRepository = tmpAuditStructureRepository;
     }
@@ -136,7 +141,7 @@ public class DeviceGroupService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(deviceGroup, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.DEVICEGROUP, StructureCommand.CREATE, null, deviceGroup, holderStructures));
+                NotificationUtil.prepareNotification(Type.DEVICEGROUP, StructureCommand.CREATE, null, tmpDeviceGroup, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -183,18 +188,23 @@ public class DeviceGroupService {
         tmpDeviceGroup.setOrdering(structureElementCommand.getOrdering());
         tmpDeviceGroup.setDescription(structureElementCommand.getDescription());
         tmpDeviceGroupRepository.updateDeviceGroup(tmpDeviceGroup);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.UPDATE, tmpDeviceGroup));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.UPDATE, tmpDeviceGroup);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<DeviceGroup> previouses = iDeviceGroupRepository.findPreviousByUuidAndId(deviceGroup.getUuid().toString(), deviceGroup.getId());
         DeviceGroup previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.DEVICEGROUP.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpDeviceGroup tmpPrevious = StructureUtil.convert2DeviceGroup(tmpPreviousAuditStructure);
+        // </TMP>
 
         LOGGER.log(Level.FINE, () -> MessageFormat.format(TextUtil.DESCRIPTION_NAME_VALUE, TextUtil.UPDATE_STRUCTURE, TextUtil.COMMAND, StructureCommand.UPDATE));
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(deviceGroup, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.DEVICEGROUP, StructureCommand.UPDATE, previous, deviceGroup, holderStructures));
+                NotificationUtil.prepareNotification(Type.DEVICEGROUP, StructureCommand.UPDATE, tmpPrevious, tmpDeviceGroup, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -240,12 +250,17 @@ public class DeviceGroupService {
         tmpDeviceGroup.setDeleted(Boolean.TRUE);
         tmpDeviceGroup.setAttributesProcessed(when, username, null);
         tmpDeviceGroupRepository.updateDeviceGroup(tmpDeviceGroup);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.DELETE, tmpDeviceGroup));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.DELETE, tmpDeviceGroup);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<DeviceGroup> previouses = iDeviceGroupRepository.findPreviousByUuidAndId(uuid, deviceGroup.getId());
         DeviceGroup previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.DEVICEGROUP.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpDeviceGroup tmpPrevious = StructureUtil.convert2DeviceGroup(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         //     will propagate to sub structures
@@ -262,7 +277,7 @@ public class DeviceGroupService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(deviceGroup, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.DEVICEGROUP, StructureCommand.DELETE, previous, deviceGroup, holderStructures));
+                NotificationUtil.prepareNotification(Type.DEVICEGROUP, StructureCommand.DELETE, tmpPrevious, tmpDeviceGroup, holderTmpStructures));
     }
 
 }
diff --git a/src/main/java/org/openepics/names/service/DeviceTypeService.java b/src/main/java/org/openepics/names/service/DeviceTypeService.java
index 802bb66d471fb9b4f9cd66b5f1c9577ab4e3cfe4..ff55ffb45fc28efeba6be551154d502f747c2909 100644
--- a/src/main/java/org/openepics/names/service/DeviceTypeService.java
+++ b/src/main/java/org/openepics/names/service/DeviceTypeService.java
@@ -32,6 +32,7 @@ import org.openepics.names.repository.model.DeviceType;
 import org.openepics.names.repository.model.tmp.TmpAuditStructure;
 import org.openepics.names.repository.model.tmp.TmpDeviceGroup;
 import org.openepics.names.repository.model.tmp.TmpDeviceType;
+import org.openepics.names.repository.tmp.ITmpAuditStructureRepository;
 import org.openepics.names.repository.tmp.ITmpDeviceGroupRepository;
 import org.openepics.names.repository.tmp.ITmpDeviceTypeRepository;
 import org.openepics.names.repository.tmp.TmpAuditStructureRepository;
@@ -45,6 +46,7 @@ import org.openepics.names.util.HolderTmpStructures;
 import org.openepics.names.util.StructureChoice;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureElementUtil;
+import org.openepics.names.util.StructureUtil;
 import org.openepics.names.util.TextUtil;
 import org.openepics.names.util.ValidateUtil;
 import org.openepics.names.util.notification.NotificationUtil;
@@ -68,6 +70,7 @@ public class DeviceTypeService {
     private DeviceTypeRepository deviceTypeRepository;
     private ITmpDeviceGroupRepository iTmpDeviceGroupRepository;
     private ITmpDeviceTypeRepository iTmpDeviceTypeRepository;
+    private ITmpAuditStructureRepository iTmpAuditStructureRepository;
     private TmpDeviceTypeRepository tmpDeviceTypeRepository;
     private TmpAuditStructureRepository tmpAuditStructureRepository;
 
@@ -78,6 +81,7 @@ public class DeviceTypeService {
             DeviceTypeRepository deviceTypeRepository,
             ITmpDeviceGroupRepository iTmpDeviceGroupRepository,
             ITmpDeviceTypeRepository iTmpDeviceTypeRepository,
+            ITmpAuditStructureRepository iTmpAuditStructureRepository,
             TmpDeviceTypeRepository tmpDeviceTypeRepository,
             TmpAuditStructureRepository tmpAuditStructureRepository) {
         this.namesService = namesService;
@@ -85,6 +89,7 @@ public class DeviceTypeService {
         this.deviceTypeRepository = deviceTypeRepository;
         this.iTmpDeviceGroupRepository = iTmpDeviceGroupRepository;
         this.iTmpDeviceTypeRepository = iTmpDeviceTypeRepository;
+        this.iTmpAuditStructureRepository = iTmpAuditStructureRepository;
         this.tmpDeviceTypeRepository = tmpDeviceTypeRepository;
         this.tmpAuditStructureRepository = tmpAuditStructureRepository;
     }
@@ -129,7 +134,7 @@ public class DeviceTypeService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(deviceType, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.DEVICETYPE, StructureCommand.CREATE, null, deviceType, holderStructures));
+                NotificationUtil.prepareNotification(Type.DEVICETYPE, StructureCommand.CREATE, null, tmpDeviceType, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -178,12 +183,17 @@ public class DeviceTypeService {
         tmpDeviceType.setOrdering(structureElementCommand.getOrdering());
         tmpDeviceType.setDescription(structureElementCommand.getDescription());
         tmpDeviceTypeRepository.updateDeviceType(tmpDeviceType);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.UPDATE, tmpDeviceType));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.UPDATE, tmpDeviceType);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<DeviceType> previouses = iDeviceTypeRepository.findPreviousByUuidAndId(deviceType.getUuid().toString(), deviceType.getId());
         DeviceType previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.DEVICETYPE.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpDeviceType tmpPrevious = StructureUtil.convert2DeviceType(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         namesService.updateNames(previous, deviceType, username);
@@ -192,7 +202,7 @@ public class DeviceTypeService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(deviceType, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.DEVICETYPE, StructureCommand.UPDATE, previous, deviceType, holderStructures));
+                NotificationUtil.prepareNotification(Type.DEVICETYPE, StructureCommand.UPDATE, tmpPrevious, tmpDeviceType, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -238,12 +248,17 @@ public class DeviceTypeService {
         tmpDeviceType.setDeleted(Boolean.TRUE);
         tmpDeviceType.setAttributesProcessed(when, username, null);
         tmpDeviceTypeRepository.updateDeviceType(tmpDeviceType);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.DELETE, tmpDeviceType));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.DELETE, tmpDeviceType);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<DeviceType> previouses = iDeviceTypeRepository.findPreviousByUuidAndId(uuid, deviceType.getId());
         DeviceType previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.DEVICETYPE.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpDeviceType tmpPrevious = StructureUtil.convert2DeviceType(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         namesService.deleteNames(deviceType, username);
@@ -252,7 +267,7 @@ public class DeviceTypeService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(deviceType, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.DEVICETYPE, StructureCommand.DELETE, previous, deviceType, holderStructures));
+                NotificationUtil.prepareNotification(Type.DEVICETYPE, StructureCommand.DELETE, tmpPrevious, tmpDeviceType, holderTmpStructures));
     }
 
 }
diff --git a/src/main/java/org/openepics/names/service/DisciplineService.java b/src/main/java/org/openepics/names/service/DisciplineService.java
index 6c4d378904f45f3e18017f6ec96a6843f66e3319..a6b8b2a8c2f3d91645ff3ea9c0f6ee1f87d8b10c 100644
--- a/src/main/java/org/openepics/names/service/DisciplineService.java
+++ b/src/main/java/org/openepics/names/service/DisciplineService.java
@@ -33,6 +33,7 @@ import org.openepics.names.repository.model.DeviceGroup;
 import org.openepics.names.repository.model.Discipline;
 import org.openepics.names.repository.model.tmp.TmpAuditStructure;
 import org.openepics.names.repository.model.tmp.TmpDiscipline;
+import org.openepics.names.repository.tmp.ITmpAuditStructureRepository;
 import org.openepics.names.repository.tmp.ITmpDisciplineRepository;
 import org.openepics.names.repository.tmp.TmpAuditStructureRepository;
 import org.openepics.names.repository.tmp.TmpDisciplineRepository;
@@ -45,6 +46,7 @@ import org.openepics.names.util.HolderTmpStructures;
 import org.openepics.names.util.StructureChoice;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureElementUtil;
+import org.openepics.names.util.StructureUtil;
 import org.openepics.names.util.TextUtil;
 import org.openepics.names.util.ValidateUtil;
 import org.openepics.names.util.notification.NotificationUtil;
@@ -71,6 +73,7 @@ public class DisciplineService {
     private IDeviceGroupRepository iDeviceGroupRepository;
     private DisciplineRepository disciplineRepository;
     private ITmpDisciplineRepository iTmpDisciplineRepository;
+    private ITmpAuditStructureRepository iTmpAuditStructureRepository;
     private TmpDisciplineRepository tmpDisciplineRepository;
     private TmpAuditStructureRepository tmpAuditStructureRepository;
 
@@ -82,6 +85,7 @@ public class DisciplineService {
             IDeviceGroupRepository iDeviceGroupRepository,
             DisciplineRepository disciplineRepository,
             ITmpDisciplineRepository iTmpDisciplineRepository,
+            ITmpAuditStructureRepository iTmpAuditStructureRepository,
             TmpDisciplineRepository tmpDisciplineRepository,
             TmpAuditStructureRepository tmpAuditStructureRepository) {
         this.namesService = namesService;
@@ -90,6 +94,7 @@ public class DisciplineService {
         this.iDeviceGroupRepository = iDeviceGroupRepository;
         this.disciplineRepository = disciplineRepository;
         this.iTmpDisciplineRepository = iTmpDisciplineRepository;
+        this.iTmpAuditStructureRepository = iTmpAuditStructureRepository;
         this.tmpDisciplineRepository = tmpDisciplineRepository;
         this.tmpAuditStructureRepository = tmpAuditStructureRepository;
     }
@@ -133,7 +138,7 @@ public class DisciplineService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(discipline, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.DISCIPLINE, StructureCommand.CREATE, null, discipline, holderStructures));
+                NotificationUtil.prepareNotification(Type.DISCIPLINE, StructureCommand.CREATE, null, tmpDiscipline, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -182,12 +187,17 @@ public class DisciplineService {
         tmpDiscipline.setOrdering(structureElementCommand.getOrdering());
         tmpDiscipline.setDescription(structureElementCommand.getDescription());
         tmpDisciplineRepository.updateDiscipline(tmpDiscipline);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.UPDATE, tmpDiscipline));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.UPDATE, tmpDiscipline);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<Discipline> previouses = iDisciplineRepository.findPreviousByUuidAndId(discipline.getUuid().toString(), discipline.getId());
         Discipline previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.DISCIPLINE.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpDiscipline tmpPrevious = StructureUtil.convert2Discipline(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         namesService.updateNames(previous, discipline, username);
@@ -196,7 +206,7 @@ public class DisciplineService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(discipline, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.DISCIPLINE, StructureCommand.UPDATE, previous, discipline, holderStructures));
+                NotificationUtil.prepareNotification(Type.DISCIPLINE, StructureCommand.UPDATE, tmpPrevious, tmpDiscipline, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -243,12 +253,17 @@ public class DisciplineService {
         tmpDiscipline.setDeleted(Boolean.TRUE);
         tmpDiscipline.setAttributesProcessed(when, username, null);
         tmpDisciplineRepository.updateDiscipline(tmpDiscipline);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.DELETE, tmpDiscipline));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.DELETE, tmpDiscipline);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<Discipline> previouses = iDisciplineRepository.findPreviousByUuidAndId(uuid, discipline.getId());
         Discipline previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.DISCIPLINE.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpDiscipline tmpPrevious = StructureUtil.convert2Discipline(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         //     will propagate to sub structures
@@ -267,7 +282,7 @@ public class DisciplineService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(discipline, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.DISCIPLINE, StructureCommand.DELETE, previous, discipline, holderStructures));
+                NotificationUtil.prepareNotification(Type.DISCIPLINE, StructureCommand.DELETE, tmpPrevious, tmpDiscipline, holderTmpStructures));
     }
 
 }
diff --git a/src/main/java/org/openepics/names/service/SubsystemService.java b/src/main/java/org/openepics/names/service/SubsystemService.java
index ccbf26dc1f80758bde05da1821d66c1b4dd04d34..38b10a55e01cd874d7a36874ffff9a6004b94abf 100644
--- a/src/main/java/org/openepics/names/service/SubsystemService.java
+++ b/src/main/java/org/openepics/names/service/SubsystemService.java
@@ -33,6 +33,7 @@ import org.openepics.names.repository.model.Subsystem;
 import org.openepics.names.repository.model.tmp.TmpAuditStructure;
 import org.openepics.names.repository.model.tmp.TmpSubsystem;
 import org.openepics.names.repository.model.tmp.TmpSystem;
+import org.openepics.names.repository.tmp.ITmpAuditStructureRepository;
 import org.openepics.names.repository.tmp.ITmpSubsystemRepository;
 import org.openepics.names.repository.tmp.ITmpSystemRepository;
 import org.openepics.names.repository.tmp.TmpAuditStructureRepository;
@@ -71,6 +72,7 @@ public class SubsystemService {
     private SubsystemRepository subsystemRepository;
     private ITmpSystemRepository iTmpSystemRepository;
     private ITmpSubsystemRepository iTmpSubsystemRepository;
+    private ITmpAuditStructureRepository iTmpAuditStructureRepository;
     private TmpSubsystemRepository tmpSubsystemRepository;
     private TmpAuditStructureRepository tmpAuditStructureRepository;
 
@@ -82,6 +84,7 @@ public class SubsystemService {
             SubsystemRepository subsystemRepository,
             ITmpSystemRepository iTmpSystemRepository,
             ITmpSubsystemRepository iTmpSubsystemRepository,
+            ITmpAuditStructureRepository iTmpAuditStructureRepository,
             TmpSubsystemRepository tmpSubsystemRepository,
             TmpAuditStructureRepository tmpAuditStructureRepository) {
         this.namesService = namesService;
@@ -89,6 +92,7 @@ public class SubsystemService {
         this.subsystemRepository = subsystemRepository;
         this.iTmpSystemRepository = iTmpSystemRepository;
         this.iTmpSubsystemRepository = iTmpSubsystemRepository;
+        this.iTmpAuditStructureRepository = iTmpAuditStructureRepository;
         this.tmpSubsystemRepository = tmpSubsystemRepository;
         this.tmpAuditStructureRepository = tmpAuditStructureRepository;
     }
@@ -151,7 +155,7 @@ public class SubsystemService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(subsystem, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.SUBSYSTEM, StructureCommand.CREATE, null, subsystem, holderStructures));
+                NotificationUtil.prepareNotification(Type.SUBSYSTEM, StructureCommand.CREATE, null, tmpSubsystem, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -208,12 +212,17 @@ public class SubsystemService {
         tmpSubsystem.setOrdering(structureElementCommand.getOrdering());
         tmpSubsystem.setDescription(structureElementCommand.getDescription());
         tmpSubsystemRepository.updateSubsystem(tmpSubsystem);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.UPDATE, tmpSubsystem));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.UPDATE, tmpSubsystem);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<Subsystem> previouses = iSubsystemRepository.findPreviousByUuidAndId(subsystem.getUuid().toString(), subsystem.getId());
         Subsystem previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.SUBSYSTEM.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpSubsystem tmpPrevious = StructureUtil.convert2Subsystem(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         namesService.updateNames(previous, subsystem, username);
@@ -222,7 +231,7 @@ public class SubsystemService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(subsystem, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.SUBSYSTEM, StructureCommand.UPDATE, previous, subsystem, holderStructures));
+                NotificationUtil.prepareNotification(Type.SUBSYSTEM, StructureCommand.UPDATE, tmpPrevious, tmpSubsystem, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -268,12 +277,17 @@ public class SubsystemService {
         tmpSubsystem.setDeleted(Boolean.TRUE);
         tmpSubsystem.setAttributesProcessed(when, username, null);
         tmpSubsystemRepository.updateSubsystem(tmpSubsystem);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.DELETE, tmpSubsystem));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.DELETE, tmpSubsystem);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<Subsystem> previouses = iSubsystemRepository.findPreviousByUuidAndId(uuid, subsystem.getId());
         Subsystem previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.SUBSYSTEM.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpSubsystem tmpPrevious = StructureUtil.convert2Subsystem(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         namesService.deleteNames(subsystem, username);
@@ -282,7 +296,7 @@ public class SubsystemService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(subsystem, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.SUBSYSTEM, StructureCommand.DELETE, previous, subsystem, holderStructures));
+                NotificationUtil.prepareNotification(Type.SUBSYSTEM, StructureCommand.DELETE, tmpPrevious, tmpSubsystem, holderTmpStructures));
     }
 
 }
diff --git a/src/main/java/org/openepics/names/service/SystemGroupService.java b/src/main/java/org/openepics/names/service/SystemGroupService.java
index 7a2338e36061dd966c34ceee94449eda51cc0412..9aeb32bed7bfc311d45c3d4b4fc41a5cb73df60a 100644
--- a/src/main/java/org/openepics/names/service/SystemGroupService.java
+++ b/src/main/java/org/openepics/names/service/SystemGroupService.java
@@ -33,6 +33,7 @@ import org.openepics.names.repository.model.System;
 import org.openepics.names.repository.model.SystemGroup;
 import org.openepics.names.repository.model.tmp.TmpAuditStructure;
 import org.openepics.names.repository.model.tmp.TmpSystemGroup;
+import org.openepics.names.repository.tmp.ITmpAuditStructureRepository;
 import org.openepics.names.repository.tmp.ITmpSystemGroupRepository;
 import org.openepics.names.repository.tmp.TmpAuditStructureRepository;
 import org.openepics.names.repository.tmp.TmpSystemGroupRepository;
@@ -73,6 +74,7 @@ public class SystemGroupService {
     private ISystemRepository iSystemRepository;
     private SystemGroupRepository systemGroupRepository;
     private ITmpSystemGroupRepository iTmpSystemGroupRepository;
+    private ITmpAuditStructureRepository iTmpAuditStructureRepository;
     private TmpSystemGroupRepository tmpSystemGroupRepository;
     private TmpAuditStructureRepository tmpAuditStructureRepository;
 
@@ -84,6 +86,7 @@ public class SystemGroupService {
             ISystemRepository iSystemRepository,
             SystemGroupRepository systemGroupRepository,
             ITmpSystemGroupRepository iTmpSystemGroupRepository,
+            ITmpAuditStructureRepository iTmpAuditStructureRepository,
             TmpSystemGroupRepository tmpSystemGroupRepository,
             TmpAuditStructureRepository tmpAuditStructureRepository) {
         this.namesService = namesService;
@@ -92,6 +95,7 @@ public class SystemGroupService {
         this.iSystemRepository = iSystemRepository;
         this.systemGroupRepository = systemGroupRepository;
         this.iTmpSystemGroupRepository = iTmpSystemGroupRepository;
+        this.iTmpAuditStructureRepository = iTmpAuditStructureRepository;
         this.tmpSystemGroupRepository = tmpSystemGroupRepository;
         this.tmpAuditStructureRepository = tmpAuditStructureRepository;
     }
@@ -152,7 +156,7 @@ public class SystemGroupService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(systemGroup, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.SYSTEMGROUP, StructureCommand.CREATE, null, systemGroup, holderStructures));
+                NotificationUtil.prepareNotification(Type.SYSTEMGROUP, StructureCommand.CREATE, null, tmpSystemGroup, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -201,12 +205,17 @@ public class SystemGroupService {
         tmpSystemGroup.setOrdering(structureElementCommand.getOrdering());
         tmpSystemGroup.setDescription(structureElementCommand.getDescription());
         tmpSystemGroupRepository.updateSystemGroup(tmpSystemGroup);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.UPDATE, tmpSystemGroup));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.UPDATE, tmpSystemGroup);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<SystemGroup> previouses = iSystemGroupRepository.findPreviousByUuidAndId(uuid, systemGroup.getId());
         SystemGroup previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.SYSTEMGROUP.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpSystemGroup tmpPrevious = StructureUtil.convert2SystemGroup(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         namesService.updateNames(previous, systemGroup, username);
@@ -215,7 +224,7 @@ public class SystemGroupService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(systemGroup, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.SYSTEMGROUP, StructureCommand.UPDATE, previous, systemGroup, holderStructures));
+                NotificationUtil.prepareNotification(Type.SYSTEMGROUP, StructureCommand.UPDATE, tmpPrevious, tmpSystemGroup, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -262,12 +271,17 @@ public class SystemGroupService {
         tmpSystemGroup.setDeleted(Boolean.TRUE);
         tmpSystemGroup.setAttributesProcessed(when, username, null);
         tmpSystemGroupRepository.updateSystemGroup(tmpSystemGroup);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.DELETE, tmpSystemGroup));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.DELETE, tmpSystemGroup);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<SystemGroup> previouses = iSystemGroupRepository.findPreviousByUuidAndId(uuid, systemGroup.getId());
         SystemGroup previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.SYSTEMGROUP.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpSystemGroup tmpPrevious = StructureUtil.convert2SystemGroup(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         //     will propagate to sub structures
@@ -286,7 +300,7 @@ public class SystemGroupService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(systemGroup, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.SYSTEMGROUP, StructureCommand.DELETE, previous, systemGroup, holderStructures));
+                NotificationUtil.prepareNotification(Type.SYSTEMGROUP, StructureCommand.DELETE, tmpPrevious, tmpSystemGroup, holderTmpStructures));
     }
 
 }
diff --git a/src/main/java/org/openepics/names/service/SystemService.java b/src/main/java/org/openepics/names/service/SystemService.java
index 25fe6d31fcd78f00e3bbda5d873493daa1e39f4d..260badc3c3af151f0fa00363699eeaca5e7924a3 100644
--- a/src/main/java/org/openepics/names/service/SystemService.java
+++ b/src/main/java/org/openepics/names/service/SystemService.java
@@ -34,6 +34,7 @@ import org.openepics.names.repository.model.System;
 import org.openepics.names.repository.model.tmp.TmpAuditStructure;
 import org.openepics.names.repository.model.tmp.TmpSystem;
 import org.openepics.names.repository.model.tmp.TmpSystemGroup;
+import org.openepics.names.repository.tmp.ITmpAuditStructureRepository;
 import org.openepics.names.repository.tmp.ITmpSystemGroupRepository;
 import org.openepics.names.repository.tmp.ITmpSystemRepository;
 import org.openepics.names.repository.tmp.TmpAuditStructureRepository;
@@ -76,6 +77,7 @@ public class SystemService {
     private SystemRepository systemRepository;
     private ITmpSystemGroupRepository iTmpSystemGroupRepository;
     private ITmpSystemRepository iTmpSystemRepository;
+    private ITmpAuditStructureRepository iTmpAuditStructureRepository;
     private TmpSystemRepository tmpSystemRepository;
     private TmpAuditStructureRepository tmpAuditStructureRepository;
 
@@ -88,6 +90,7 @@ public class SystemService {
             SystemRepository systemRepository,
             ITmpSystemGroupRepository iTmpSystemGroupRepository,
             ITmpSystemRepository iTmpSystemRepository,
+            ITmpAuditStructureRepository iTmpAuditStructureRepository,
             TmpSystemRepository tmpSystemRepository,
             TmpAuditStructureRepository tmpAuditStructureRepository) {
         this.namesService = namesService;
@@ -97,6 +100,7 @@ public class SystemService {
         this.systemRepository = systemRepository;
         this.iTmpSystemGroupRepository = iTmpSystemGroupRepository;
         this.iTmpSystemRepository = iTmpSystemRepository;
+        this.iTmpAuditStructureRepository = iTmpAuditStructureRepository;
         this.tmpSystemRepository = tmpSystemRepository;
         this.tmpAuditStructureRepository = tmpAuditStructureRepository;
     }
@@ -159,7 +163,7 @@ public class SystemService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(system, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.SYSTEM, StructureCommand.CREATE, null, system, holderStructures));
+                NotificationUtil.prepareNotification(Type.SYSTEM, StructureCommand.CREATE, null, tmpSystem, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -216,12 +220,17 @@ public class SystemService {
         tmpSystem.setOrdering(structureElementCommand.getOrdering());
         tmpSystem.setDescription(structureElementCommand.getDescription());
         tmpSystemRepository.updateSystem(tmpSystem);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.UPDATE, tmpSystem));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.UPDATE, tmpSystem);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<System> previouses = iSystemRepository.findPreviousByUuidAndId(system.getUuid().toString(), system.getId());
         System previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.SYSTEM.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpSystem tmpPrevious = StructureUtil.convert2System(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         namesService.updateNames(previous, system, username);
@@ -230,7 +239,7 @@ public class SystemService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(system, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.SYSTEM, StructureCommand.UPDATE, previous, system, holderStructures));
+                NotificationUtil.prepareNotification(Type.SYSTEM, StructureCommand.UPDATE, tmpPrevious, tmpSystem, holderTmpStructures));
     }
 
     @Transactional(propagation = Propagation.MANDATORY)
@@ -277,12 +286,17 @@ public class SystemService {
         tmpSystem.setDeleted(Boolean.TRUE);
         tmpSystem.setAttributesProcessed(when, username, null);
         tmpSystemRepository.updateSystem(tmpSystem);
-        tmpAuditStructureRepository.createTmpAuditStructure(new TmpAuditStructure(TextUtil.DELETE, tmpSystem));
+        TmpAuditStructure tmpAuditStructure = new TmpAuditStructure(TextUtil.DELETE, tmpSystem);
+        tmpAuditStructureRepository.createTmpAuditStructure(tmpAuditStructure);
         // </TMP>
 
         // previous
         List<System> previouses = iSystemRepository.findPreviousByUuidAndId(uuid, system.getId());
         System previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null;
+        // <TMP>
+        TmpAuditStructure tmpPreviousAuditStructure = iTmpAuditStructureRepository.findPreviousByAuditTableAndUuidAndAuditId(Type.SYSTEM.name().toLowerCase(), uuid, tmpAuditStructure.getAuditId());
+        TmpSystem tmpPrevious = StructureUtil.convert2System(tmpPreviousAuditStructure);
+        // </TMP>
 
         // additional
         //     will propagate to sub structures
@@ -301,7 +315,7 @@ public class SystemService {
 
         return new StructureElementNotification(
                 StructureElementUtil.getStructureElementProcessed(system, holderStructures, StructureChoice.STRUCTURE),
-                NotificationUtil.prepareNotification(Type.SYSTEM, StructureCommand.DELETE, previous, system, holderStructures));
+                NotificationUtil.prepareNotification(Type.SYSTEM, StructureCommand.DELETE, tmpPrevious, tmpSystem, holderTmpStructures));
     }
 
 }
diff --git a/src/main/java/org/openepics/names/util/StructureUtil.java b/src/main/java/org/openepics/names/util/StructureUtil.java
index f3cc81f2779c742fc2d95d9478f45f640cd1e8e7..e1d75c2df77050ec564afb5c324f450812be2fee 100644
--- a/src/main/java/org/openepics/names/util/StructureUtil.java
+++ b/src/main/java/org/openepics/names/util/StructureUtil.java
@@ -19,6 +19,7 @@
 package org.openepics.names.util;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.UUID;
@@ -30,12 +31,14 @@ import org.openepics.names.repository.model.Discipline;
 import org.openepics.names.repository.model.Subsystem;
 import org.openepics.names.repository.model.System;
 import org.openepics.names.repository.model.SystemGroup;
+import org.openepics.names.repository.model.tmp.TmpAuditStructure;
 import org.openepics.names.repository.model.tmp.TmpDeviceGroup;
 import org.openepics.names.repository.model.tmp.TmpDeviceType;
 import org.openepics.names.repository.model.tmp.TmpDiscipline;
 import org.openepics.names.repository.model.tmp.TmpSubsystem;
 import org.openepics.names.repository.model.tmp.TmpSystem;
 import org.openepics.names.repository.model.tmp.TmpSystemGroup;
+import org.openepics.names.rest.beans.Status;
 
 import com.google.common.collect.Lists;
 
@@ -603,4 +606,79 @@ public class StructureUtil {
         return listUuid;
     }
 
+    // --------------------------------------------------
+
+    /**
+     * Convert an audit structure entry to a system group entry.
+     *
+     * @param tmpAuditStructure audit structure entry
+     * @return system group
+     */
+    public static TmpSystemGroup convert2SystemGroup(TmpAuditStructure tmpAuditStructure) {
+        return new TmpSystemGroup(tmpAuditStructure.getUuid(),
+                tmpAuditStructure.getMnemonic(), tmpAuditStructure.getMnemonicEquivalence(), tmpAuditStructure.getOrdering(), tmpAuditStructure.getDescription(),
+                tmpAuditStructure.getStatus(), tmpAuditStructure.isDeleted(),
+                tmpAuditStructure.getProcessed(), tmpAuditStructure.getProcessedBy(), tmpAuditStructure.getProcessedComment());
+    }
+    /**
+     * Convert an audit structure entry to a system entry.
+     *
+     * @param tmpAuditStructure audit structure entry
+     * @return system
+     */
+    public static TmpSystem convert2System(TmpAuditStructure tmpAuditStructure) {
+        return new TmpSystem(tmpAuditStructure.getUuid(), tmpAuditStructure.getParentId(),
+                tmpAuditStructure.getMnemonic(), tmpAuditStructure.getMnemonicEquivalence(), tmpAuditStructure.getOrdering(), tmpAuditStructure.getDescription(),
+                tmpAuditStructure.getStatus(), tmpAuditStructure.isDeleted(),
+                tmpAuditStructure.getProcessed(), tmpAuditStructure.getProcessedBy(), tmpAuditStructure.getProcessedComment());
+    }
+    /**
+     * Convert an audit structure entry to a subsystem entry.
+     *
+     * @param tmpAuditStructure audit structure entry
+     * @return subsystem
+     */
+    public static TmpSubsystem convert2Subsystem(TmpAuditStructure tmpAuditStructure) {
+        return new TmpSubsystem(tmpAuditStructure.getUuid(), tmpAuditStructure.getParentId(),
+                tmpAuditStructure.getMnemonic(), tmpAuditStructure.getMnemonicEquivalence(), tmpAuditStructure.getOrdering(), tmpAuditStructure.getDescription(),
+                tmpAuditStructure.getStatus(), tmpAuditStructure.isDeleted(),
+                tmpAuditStructure.getProcessed(), tmpAuditStructure.getProcessedBy(), tmpAuditStructure.getProcessedComment());
+    }
+    /**
+     * Convert an audit structure entry to a discipline entry.
+     *
+     * @param tmpAuditStructure audit structure entry
+     * @return discipline
+     */
+    public static TmpDiscipline convert2Discipline(TmpAuditStructure tmpAuditStructure) {
+        return new TmpDiscipline(tmpAuditStructure.getUuid(),
+                tmpAuditStructure.getMnemonic(), tmpAuditStructure.getMnemonicEquivalence(), tmpAuditStructure.getOrdering(), tmpAuditStructure.getDescription(),
+                tmpAuditStructure.getStatus(), tmpAuditStructure.isDeleted(),
+                tmpAuditStructure.getProcessed(), tmpAuditStructure.getProcessedBy(), tmpAuditStructure.getProcessedComment());
+    }
+    /**
+     * Convert an audit structure entry to a device group entry.
+     *
+     * @param tmpAuditStructure audit structure entry
+     * @return device group
+     */
+    public static TmpDeviceGroup convert2DeviceGroup(TmpAuditStructure tmpAuditStructure) {
+        return new TmpDeviceGroup(tmpAuditStructure.getUuid(), tmpAuditStructure.getParentId(),
+                tmpAuditStructure.getMnemonic(), tmpAuditStructure.getMnemonicEquivalence(), tmpAuditStructure.getOrdering(), tmpAuditStructure.getDescription(),
+                tmpAuditStructure.getStatus(), tmpAuditStructure.isDeleted(),
+                tmpAuditStructure.getProcessed(), tmpAuditStructure.getProcessedBy(), tmpAuditStructure.getProcessedComment());
+    }
+    /**
+     * Convert an audit structure entry to a device type entry.
+     *
+     * @param tmpAuditStructure audit structure entry
+     * @return device type
+     */
+    public static TmpDeviceType convert2DeviceType(TmpAuditStructure tmpAuditStructure) {
+        return new TmpDeviceType(tmpAuditStructure.getUuid(), tmpAuditStructure.getParentId(),
+                tmpAuditStructure.getMnemonic(), tmpAuditStructure.getMnemonicEquivalence(), tmpAuditStructure.getOrdering(), tmpAuditStructure.getDescription(),
+                tmpAuditStructure.getStatus(), tmpAuditStructure.isDeleted(),
+                tmpAuditStructure.getProcessed(), tmpAuditStructure.getProcessedBy(), tmpAuditStructure.getProcessedComment());
+    }
+
 }
diff --git a/src/main/java/org/openepics/names/util/notification/NotificationScheduler.java b/src/main/java/org/openepics/names/util/notification/NotificationScheduler.java
index 2124ae3c4f6aec1a8970ec8c88416e68d7d11a9a..aa7a1afa5f2bbd5d7ec568991e8a7b4baf346845 100644
--- a/src/main/java/org/openepics/names/util/notification/NotificationScheduler.java
+++ b/src/main/java/org/openepics/names/util/notification/NotificationScheduler.java
@@ -29,8 +29,8 @@ import java.util.UUID;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.openepics.names.repository.INameRepository;
-import org.openepics.names.repository.model.Name;
+import org.openepics.names.repository.model.tmp.TmpAuditName;
+import org.openepics.names.repository.tmp.ITmpAuditNameRepository;
 import org.openepics.names.service.NotificationService;
 import org.openepics.names.util.NameCommand;
 import org.openepics.names.util.ValidateUtil;
@@ -54,10 +54,10 @@ public class NotificationScheduler {
 
     private static final String NOTIFY_NAMES_FROM_TO_CREATED_UPDATED_DELETED = "Notify names, {0} - {1}, # created: {2}, # updated: {3}, # deleted: {4}";
 
-    @Autowired
-    private INameRepository iNameRepository;
     @Autowired
     private NotificationService notificationService;
+    @Autowired
+    private ITmpAuditNameRepository iTmpAuditNameRepository;
 
     /**
      * Notify administrators about changes for names and structures.
@@ -101,9 +101,9 @@ public class NotificationScheduler {
         // find names for previous day
         //     uuid ascending, id ascending
         //     distinct uuids
-        List<Name> names = iNameRepository.findByRequestedBetween(from, to);
+        List<TmpAuditName> names = iTmpAuditNameRepository.findByRequestedBetween(from, to);
         Set<UUID> uuids = new TreeSet<>();
-        for (Name name : names) {
+        for (TmpAuditName name : names) {
             uuids.add(name.getUuid());
         }
 
@@ -123,10 +123,10 @@ public class NotificationScheduler {
         //                 deleted
         for (UUID uuid : uuids) {
             // prepare
-            List<Name> extracted = extractByUuid(names, uuid);
-            List<Name> namesByUuid = iNameRepository.findByUuid(uuid.toString());
-            sortById(extracted);
-            sortById(namesByUuid);
+            List<TmpAuditName> extracted = extractByUuid(names, uuid);
+            List<TmpAuditName> namesByUuid = iTmpAuditNameRepository.findByUuid(uuid.toString());
+            sortByAuditId(extracted);
+            sortByAuditId(namesByUuid);
 
             int index = -1;
             for (int i=0; i<namesByUuid.size(); i++) {
@@ -141,10 +141,10 @@ public class NotificationScheduler {
                 // created - no previous
                 // updated - is not latest
                 // deleted - is latest and is deleted
-                Name name = extracted.get(i);
+                TmpAuditName name = extracted.get(i);
                 if (i == 0 && index == 0) {
                     NotificationUtil.prepareAddNotification(created, NameCommand.CREATE, null, name);
-                } else if (Boolean.TRUE.equals(name.isLatest()) && Boolean.TRUE.equals(name.isDeleted())) {
+                } else if (Boolean.TRUE.equals(name.isDeleted())) {
                     NotificationUtil.prepareAddNotification(deleted, NameCommand.DELETE, null, name);
                 } else {
                     NotificationUtil.prepareAddNotification(updated, NameCommand.UPDATE, findPreviousByName(namesByUuid, name), name);
@@ -203,10 +203,10 @@ public class NotificationScheduler {
      * @param uuid uuid
      * @return list of names
      */
-    private List<Name> extractByUuid(List<Name> list, UUID uuid) {
-        List<Name> extracted = Lists.newArrayList();
+    private List<TmpAuditName> extractByUuid(List<TmpAuditName> list, UUID uuid) {
+        List<TmpAuditName> extracted = Lists.newArrayList();
         if (list != null && !list.isEmpty() && uuid != null) {
-            for (Name name : list) {
+            for (TmpAuditName name : list) {
                 if (uuid.equals(name.getUuid())) {
                     extracted.add(name);
                 }
@@ -220,8 +220,8 @@ public class NotificationScheduler {
      *
      * @param names names
      */
-    private void sortById(List<Name> names) {
-        Collections.sort(names, (Name arg0, Name arg1) -> arg0.getId().compareTo(arg1.getId()));
+    private void sortByAuditId(List<TmpAuditName> names) {
+        Collections.sort(names, (TmpAuditName arg0, TmpAuditName arg1) -> arg0.getAuditId().compareTo(arg1.getAuditId()));
     }
 
     /**
@@ -231,14 +231,14 @@ public class NotificationScheduler {
      * @param name name
      * @return name
      */
-    private Name findPreviousByName(List<Name> names, Name name) {
+    private TmpAuditName findPreviousByName(List<TmpAuditName> names, TmpAuditName name) {
         if (ValidateUtil.isAnyNull(names, name)) {
             return null;
         }
 
         // sorted list
         for (int i=0; i<names.size(); i++) {
-            if (name.getId().equals(names.get(i).getId())) {
+            if (name.getAuditId().equals(names.get(i).getAuditId())) {
                 return i > 0
                         ? names.get(i-1)
                         : null;
diff --git a/src/main/java/org/openepics/names/util/notification/NotificationUtil.java b/src/main/java/org/openepics/names/util/notification/NotificationUtil.java
index df7d8f4c4ba2b2ee117323ba947687e8c9405fe6..85a6de9a6420435f13039cb0620f7c9f54979517 100644
--- a/src/main/java/org/openepics/names/util/notification/NotificationUtil.java
+++ b/src/main/java/org/openepics/names/util/notification/NotificationUtil.java
@@ -26,16 +26,16 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import org.apache.commons.lang3.StringUtils;
-import org.openepics.names.repository.model.DeviceGroup;
-import org.openepics.names.repository.model.DeviceType;
-import org.openepics.names.repository.model.Discipline;
-import org.openepics.names.repository.model.Name;
-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.repository.model.SystemGroup;
+import org.openepics.names.repository.model.tmp.TmpStructure;
+import org.openepics.names.repository.model.tmp.TmpAuditName;
+import org.openepics.names.repository.model.tmp.TmpDeviceGroup;
+import org.openepics.names.repository.model.tmp.TmpDeviceType;
+import org.openepics.names.repository.model.tmp.TmpDiscipline;
+import org.openepics.names.repository.model.tmp.TmpSubsystem;
+import org.openepics.names.repository.model.tmp.TmpSystem;
+import org.openepics.names.repository.model.tmp.TmpSystemGroup;
 import org.openepics.names.rest.beans.Type;
-import org.openepics.names.util.HolderStructures;
+import org.openepics.names.util.HolderTmpStructures;
 import org.openepics.names.util.NameCommand;
 import org.openepics.names.util.StructureCommand;
 import org.openepics.names.util.StructureUtil;
@@ -68,7 +68,7 @@ public class NotificationUtil {
      * @param previous previous (name)
      * @param name name
      */
-    public static void prepareAddNotification(List<NotificationName> notifications, NameCommand nameCommand, Name previous, Name name) {
+    public static void prepareAddNotification(List<NotificationName> notifications, NameCommand nameCommand, TmpAuditName previous, TmpAuditName name) {
         if (notifications == null) {
             return;
         }
@@ -88,7 +88,7 @@ public class NotificationUtil {
      * @param name name
      * @return notification
      */
-    public static NotificationName prepareNotification(NameCommand nameCommand, Name previous, Name name) {
+    public static NotificationName prepareNotification(NameCommand nameCommand, TmpAuditName previous, TmpAuditName name) {
         if (LOGGER.isLoggable(Level.FINER)) {
             LOGGER.log(Level.FINER, MessageFormat.format(TextUtil.DESCRIPTION_NAME_VALUE, TextUtil.PREPARE_NOTIFICATION, "nameCommand", nameCommand));
             LOGGER.log(Level.FINER, MessageFormat.format(TextUtil.DESCRIPTION_NAME_VALUE, TextUtil.PREPARE_NOTIFICATION, "previous", previous));
@@ -140,29 +140,6 @@ public class NotificationUtil {
                 name.getRequestedBy());
     }
 
-    /**
-     * Prepare notification and add to list of notifications if notification is available.
-     *
-     * @param notifications list of notifications
-     * @param type type
-     * @param structureCommandCUD structure command (create update delete)
-     * @param previous previous (structure)
-     * @param structure structure
-     * @param holderStructures holder of system and device structure content
-     */
-    public static void prepareAddNotification(List<NotificationStructure> notifications,
-            Type type, StructureCommand structureCommandCUD,
-            Structure previous, Structure structure, HolderStructures holderStructures) {
-        if (notifications == null) {
-            return;
-        }
-
-        NotificationStructure notification = NotificationUtil.prepareNotification(type, structureCommandCUD, previous, structure, holderStructures);
-        if (notification != null) {
-            notifications.add(notification);
-        }
-    }
-
     /**
      * Prepare and return notification for system group with information about change.
      * If information is not correct, <tt>null</tt> is returned.
@@ -175,7 +152,7 @@ public class NotificationUtil {
      * @return notification
      */
     public static NotificationStructure prepareNotification(Type type, StructureCommand structureCommandCUD,
-            Structure previous, Structure structure, HolderStructures holderStructures) {
+            TmpStructure previous, TmpStructure structure, HolderTmpStructures holderStructures) {
         if (LOGGER.isLoggable(Level.FINER)) {
             LOGGER.log(Level.FINER, MessageFormat.format(TextUtil.DESCRIPTION_NAME_VALUE, TextUtil.PREPARE_NOTIFICATION, "type", type));
             LOGGER.log(Level.FINER, MessageFormat.format(TextUtil.DESCRIPTION_NAME_VALUE, TextUtil.PREPARE_NOTIFICATION, "structureCommandCUD", structureCommandCUD));
@@ -224,17 +201,17 @@ public class NotificationUtil {
 
         if (ValidateUtil.isAnyEqual(structureCommandCUD, StructureCommand.UPDATE)) {
             if (Type.SYSTEMGROUP.equals(type)) {
-                oldMnemonicpath = StructureUtil.getMnemonicPath((SystemGroup) previous, holderStructures);
+                oldMnemonicpath = StructureUtil.getMnemonicPath((TmpSystemGroup) previous, holderStructures);
             } else if (Type.SYSTEM.equals(type)) {
-                oldMnemonicpath = StructureUtil.getMnemonicPath((System) previous, holderStructures);
+                oldMnemonicpath = StructureUtil.getMnemonicPath((TmpSystem) previous, holderStructures);
             } else if (Type.SUBSYSTEM.equals(type)) {
-                oldMnemonicpath = StructureUtil.getMnemonicPath((Subsystem) previous, holderStructures);
+                oldMnemonicpath = StructureUtil.getMnemonicPath((TmpSubsystem) previous, holderStructures);
             } else if (Type.DISCIPLINE.equals(type)) {
-                oldMnemonicpath = StructureUtil.getMnemonicPath((Discipline) previous, holderStructures);
+                oldMnemonicpath = StructureUtil.getMnemonicPath((TmpDiscipline) previous, holderStructures);
             } else if (Type.DEVICEGROUP.equals(type)) {
-                oldMnemonicpath = StructureUtil.getMnemonicPath((DeviceGroup) previous, holderStructures);
+                oldMnemonicpath = StructureUtil.getMnemonicPath((TmpDeviceGroup) previous, holderStructures);
             } else if (Type.DEVICETYPE.equals(type)) {
-                oldMnemonicpath = StructureUtil.getMnemonicPath((DeviceType) previous, holderStructures);
+                oldMnemonicpath = StructureUtil.getMnemonicPath((TmpDeviceType) previous, holderStructures);
             }
 
             oldMnemonic = StringUtils.stripToEmpty(previous.getMnemonic());
@@ -243,17 +220,17 @@ public class NotificationUtil {
         }
 
         if (Type.SYSTEMGROUP.equals(type)) {
-            newMnemonicpath = StructureUtil.getMnemonicPath((SystemGroup) structure, holderStructures);
+            newMnemonicpath = StructureUtil.getMnemonicPath((TmpSystemGroup) structure, holderStructures);
         } else if (Type.SYSTEM.equals(type)) {
-            newMnemonicpath = StructureUtil.getMnemonicPath((System) structure, holderStructures);
+            newMnemonicpath = StructureUtil.getMnemonicPath((TmpSystem) structure, holderStructures);
         } else if (Type.SUBSYSTEM.equals(type)) {
-            newMnemonicpath = StructureUtil.getMnemonicPath((Subsystem) structure, holderStructures);
+            newMnemonicpath = StructureUtil.getMnemonicPath((TmpSubsystem) structure, holderStructures);
         } else if (Type.DISCIPLINE.equals(type)) {
-            newMnemonicpath = StructureUtil.getMnemonicPath((Discipline) structure, holderStructures);
+            newMnemonicpath = StructureUtil.getMnemonicPath((TmpDiscipline) structure, holderStructures);
         } else if (Type.DEVICEGROUP.equals(type)) {
-            newMnemonicpath = StructureUtil.getMnemonicPath((DeviceGroup) structure, holderStructures);
+            newMnemonicpath = StructureUtil.getMnemonicPath((TmpDeviceGroup) structure, holderStructures);
         } else if (Type.DEVICETYPE.equals(type)) {
-            newMnemonicpath = StructureUtil.getMnemonicPath((DeviceType) structure, holderStructures);
+            newMnemonicpath = StructureUtil.getMnemonicPath((TmpDeviceType) structure, holderStructures);
         }
         newMnemonic = StringUtils.stripToEmpty(structure.getMnemonic());
         newMnemonicpath = StringUtils.stripToEmpty(newMnemonicpath);