diff --git a/application-engine/src/main/java/com/netgrif/application/engine/actions/ActionApiImpl.java b/application-engine/src/main/java/com/netgrif/application/engine/actions/ActionApiImpl.java
index 4967e85e3c..be243a76b8 100644
--- a/application-engine/src/main/java/com/netgrif/application/engine/actions/ActionApiImpl.java
+++ b/application-engine/src/main/java/com/netgrif/application/engine/actions/ActionApiImpl.java
@@ -111,7 +111,7 @@ public GetDataEventOutcome getData(String taskId, Map<String, String> params) {
     }
 
     @Override
-    public SetDataEventOutcome setData(String taskId, Map<String, Map<String, String>> dataSet, Map<String, String> params) throws JsonProcessingException {
+    public SetDataEventOutcome setData(String taskId, Map<String, Map<String, Object>> dataSet, Map<String, String> params) throws JsonProcessingException {
         log.debug("Setting data for task [{}] with params: [{}]", taskId, params == null ? "null" : params.toString());
         ObjectMapper mapper = new ObjectMapper(); 
         String json = mapper.writeValueAsString(dataSet);
diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/EventService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/EventService.java
index e7c8549c21..14eba05149 100644
--- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/EventService.java
+++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/EventService.java
@@ -51,6 +51,9 @@ public List<EventOutcome> runActions(List<Action> actions, Case useCase, Optiona
         List<Function> functions = useCase == null ? Collections.emptyList() : useCase.getPetriNet().getFunctions();
         actions.forEach(action -> {
             List<EventOutcome> outcomes = actionsRunner.run(action, useCase, task, params, functions);
+            if (useCase != null) {
+                workflowService.updateCaseFromDb(useCase);
+            }
             outcomes.stream().filter(SetDataEventOutcome.class::isInstance)
                     .forEach(outcome -> {
                         if (((SetDataEventOutcome) outcome).getChangedFields().isEmpty()) return;
@@ -75,6 +78,9 @@ public List<EventOutcome> runEventActions(Case useCase, Task task, List<Action>
         List<Function> functions = useCase == null ? Collections.emptyList() : useCase.getPetriNet().getFunctions();
         actions.forEach(action -> {
             List<EventOutcome> outcomes = actionsRunner.run(action, useCase, taskOpt, params, functions);
+            if (useCase != null) {
+                workflowService.updateCaseFromDb(useCase);
+            }
             outcomes.stream().filter(SetDataEventOutcome.class::isInstance)
                     .forEach(outcome -> {
                         if (((SetDataEventOutcome) outcome).getChangedFields().isEmpty()) return;
diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java
index a16077f530..1a25eb15fb 100644
--- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java
+++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java
@@ -252,6 +252,16 @@ public Case resolveActorRef(Case useCase, boolean canSaveUseCase) {
         return useCase;
     }
 
+    @Override
+    public void updateCaseFromDb(Case useCase) {
+        Case actual = findOne(useCase.getStringId());
+        actual.getDataSet().forEach((id, dataField) -> {
+            if (dataField.isNewerThen(useCase.getDataField(id))) {
+                useCase.getDataSet().put(id, dataField);
+            }
+        });
+    }
+
     /**
      * Resolves actor permissions for the useCase based on the actor list data field.
      *
diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/interfaces/IWorkflowService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/interfaces/IWorkflowService.java
index 0065281b89..48818587fa 100644
--- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/interfaces/IWorkflowService.java
+++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/interfaces/IWorkflowService.java
@@ -31,6 +31,8 @@ public interface IWorkflowService {
 
     Case resolveActorRef(Case useCase, boolean canSaveUseCase);
 
+    void updateCaseFromDb(Case useCase);
+
     CreateCaseEventOutcome createCase(CreateCaseParams createCaseParams);
 
     Page<Case> findAllByAuthor(String authorId, String petriNet, Pageable pageable);
diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/actions/ActionApi.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/actions/ActionApi.java
index 0fcf7a3730..fac2f56709 100644
--- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/actions/ActionApi.java
+++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/actions/ActionApi.java
@@ -47,7 +47,7 @@ public interface ActionApi {
      * @return the outcome of the set data operation
      * @throws JsonProcessingException if there is an error processing JSON data
      */
-    SetDataEventOutcome setData(String taskId, Map<String, Map<String, String>> dataSet, Map<String, String> params) throws JsonProcessingException;
+    SetDataEventOutcome setData(String taskId, Map<String, Map<String, Object>> dataSet, Map<String, String> params) throws JsonProcessingException;
 
     /**
      * Finds a specific case by its ID.
