diff --git a/extraction-api-demo/src/main/java/cern/nxcals/api/metadata/winccoa/HandleNXCALS7964.java b/extraction-api-demo/src/main/java/cern/nxcals/api/metadata/winccoa/HandleNXCALS7964.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb806bc24de18912f57161eb79c28f8903a1e4e8
--- /dev/null
+++ b/extraction-api-demo/src/main/java/cern/nxcals/api/metadata/winccoa/HandleNXCALS7964.java
@@ -0,0 +1,272 @@
+package cern.nxcals.api.metadata.winccoa;
+
+import cern.nxcals.api.config.SparkContext;
+import cern.nxcals.api.domain.Entity;
+import cern.nxcals.api.domain.SystemSpec;
+import cern.nxcals.api.domain.TimeWindow;
+import cern.nxcals.api.domain.Variable;
+import cern.nxcals.api.domain.VariableConfig;
+import cern.nxcals.api.extraction.metadata.EntityService;
+import cern.nxcals.api.extraction.metadata.ServiceClientFactory;
+import cern.nxcals.api.extraction.metadata.VariableService;
+import cern.nxcals.api.extraction.metadata.queries.Entities;
+import cern.nxcals.api.extraction.metadata.queries.Variables;
+import com.google.common.collect.Sets;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Import;
+
+import java.io.IOException;
+import java.time.Instant;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.stream.Collectors;
+
+@Import(SparkContext.class)
+@SpringBootApplication
+@Slf4j
+public class HandleNXCALS7964 {
+    static {
+        String user = System.getProperty("user.name");
+        //        System.setProperty("kerberos.principal", "acclog");
+        //        System.setProperty("kerberos.keytab", "/opt/" + user + "/.keytab-acclog");
+        System.setProperty("kerberos.principal", user);
+        System.setProperty("kerberos.keytab", "/opt/" + user + "/.keytab");
+        System.setProperty("service.url",
+                "https://cs-ccr-nxcals6.cern.ch:19093,https://cs-ccr-nxcals7.cern.ch:19093,https://cs-ccr-nxcals8.cern.ch:19093");
+        //        System.setProperty("service.url",
+        //                "https://nxcals-rmucha-2.cern.ch:19093");
+    }
+
+    private static final String system = "WINCCOA";
+    private static final String winccoaEntityKey = "variable_name";
+
+    private static final String[] variableList = new String[] {
+            "QRWPU_LSS6_1TT203P.COMMAND",
+            "ACFGA_LSS6_TT851.COMMAND",
+            "QUIS_TA6_TT710.COMMAND",
+            "QRIKS_LSS6_TT732.COMMAND",
+            "ACFGA_LSS6_TT825.COMMAND",
+            "QRIKC_LSS6_PT870.COMMAND",
+            "QUIS_TA6_TT796.COMMAND",
+            "ACFGA_LSS6_TT805.COMMAND",
+            "ACFGA_LSS6_TT852.COMMAND",
+            "QRIKC_LSS6_TT911.COMMAND",
+            "QUIS_TA6_TT731.COMMAND",
+            "ACFGA_LSS6_LT822.COMMAND",
+            "QRIKS_LSS6_TT798.COMMAND",
+            "ACFGA_LSS6_EH852.CURVEID",
+            "QRWPU_LSS6_2PT212.COMMAND",
+            "ACFGA_LSS6_EH862.CURVEID",
+            "QRWPU_LSS6_TT200.COMMAND",
+            "ACFGA_LSS6_TT802.COMMAND",
+            "QRIKC_LSS6_TT981.COMMAND",
+            "QRIKC_LSS6_PT977.COMMAND",
+            "ACFGA_LSS6_EH851.CURVEID",
+            "QRIKS_LSS6_TT788.COMMAND",
+            "QUIN_TA6_PDT454.COMMAND",
+            "ACFGA_LSS6_TT804.COMMAND",
+            "QUIN_TA6_EH454.CURVEID",
+            "QRIKC_LSS6_PT901.COMMAND",
+            "QRIKS_LSS6_EH732.CURVEID",
+            "QRIKC_LSS6_PT386.COMMAND",
+            "QRWPU_LSS6_PT501.COMMAND",
+            "QRWPU_LSS6_PT200.COMMAND",
+            "ACFGA_LSS6_TT812.COMMAND",
+            "QUIN_TA6_TT452.COMMAND",
+            "ACFGA_LSS6_TT819.COMMAND",
+            "ACFGA_LSS6_TT823.COMMAND",
+            "ACFGA_LSS6_TT831.COMMAND",
+            "ACFGA_LSS6_TT803.COMMAND",
+            "QUIS_TA6_TT780.COMMAND",
+            "ACFGA_LSS6_TT821.COMMAND",
+            "ACFGA_LSS6_TT817.COMMAND",
+            "QRWPU_LSS6_2TT203P.COMMAND",
+            "QUIN_TA6_TT454.COMMAND",
+            "QUIS_TA6_PT731.COMMAND",
+            "QRWPU_LSS6_1PT203.COMMAND",
+            "ACFGA_LSS6_TT820.COMMAND",
+            "QRHCA_LSS6_TT979.COMMAND",
+            "QUIN_TA6_PT453.COMMAND",
+            "ACFGA_LSS6_TT818.COMMAND",
+            "ACFGA_LSS6_TT870P.COMMAND",
+            "QRWPU_LSS6_2PT203.COMMAND",
+            "QRWPU_LSS6_PT201.COMMAND",
+            "ACFGA_LSS6_TT822.COMMAND",
+            "QUIN_TA6_TT459.COMMAND",
+            "QUIN_TA6_EH453.CURVEID",
+            "QRIKC_LSS6_PT976.COMMAND",
+            "ACFGA_LSS6_TT816.COMMAND",
+            "ACFGA_LSS6_TT810.COMMAND",
+            "QRHCA_LSS6_TT540.COMMAND",
+            "QUIS_TA6_EH731.CURVEID",
+            "QRHCA_LSS6_TT541.COMMAND",
+            "ACFGA_LSS6_TT814.COMMAND",
+            "ACFGA_LSS6_TT815.COMMAND",
+            "QRLKS_LSS6_TT711.COMMAND",
+            "ACFGA_LSS6_TT841.COMMAND",
+            "QRWPU_TA6_PT235.COMMAND",
+            "QUIN_TA6_TT454P.COMMAND",
+            "QUIN_TA6_TT458.COMMAND",
+            "QRIKS_LSS6_TT782.COMMAND",
+            "ACFGA_LSS6_EH863.CURVEID",
+            "ACFGA_LSS6_TT832.COMMAND",
+            "QRWPU_LSS6_2PT202.COMMAND",
+            "ACFGA_LSS6_EH821.CURVEID",
+            "QRIKC_LSS6_PT981.COMMAND",
+            "QRWPU_LSS6_1TT211.COMMAND",
+            "ACFGA_LSS6_TT801.COMMAND",
+            "QRIKC_LSS6_PT871.COMMAND",
+            "QRIKC_LSS6_TT901.COMMAND",
+            "QUIS_TA6_LT731.COMMAND",
+            "QRLKS_LSS6_TT787.COMMAND",
+            "ACFGA_LSS6_EH861.CURVEID",
+            "CBWMB_BA6_QAICC.COMMAND",
+            "QRIKS_LSS6_TT789.COMMAND",
+            "QRLKS_LSS6_TT797.COMMAND",
+            "QRWPU_LSS6_2TT211.COMMAND",
+            "ACFGA_LSS6_TT824.COMMAND",
+            "QRIKS_LSS6_TT712.COMMAND",
+            "QRIKS_LSS6_TT783.COMMAND",
+            "ACFGA_LSS6_TT840.COMMAND",
+            "ACFGA_LSS6_TT811.COMMAND",
+            "QRIKC_LSS6_TT971.COMMAND",
+            "QRLKS_LSS6_TT781.COMMAND",
+            "QRWPU_LSS6_1PT212.COMMAND",
+            "QRWPU_LSS6_1PT202.COMMAND",
+            "ACFGA_LSS6_TT813.COMMAND",
+            "QRWPU_LSS6_TT201P.COMMAND",
+            "QRIKC_LSS6_TT910.COMMAND",
+            "QUIS_TA6_TT786.COMMAND",
+            "ACFGA_LSS6_LT821.COMMAND",
+            "ACFGA_LSS6_EH822.CURVEID",
+            "QUIS_TA6_TT706.COMMAND",
+            "QRIKS_LSS6_PT732.COMMAND",
+            "QRIKS_LSS6_PT788.COMMAND",
+            "QRIKS_LSS6_LT732.COMMAND"
+    };
+
+    private void generateData() {
+        // generate data - for test in dev env
+        //        EntityService entityService = ServiceClientFactory.createEntityService();
+        //        VariableService variableService = ServiceClientFactory.createVariableService();
+        //        SystemSpec winccoaSystemSpec = ServiceClientFactory.createSystemSpecService().findByName(system).orElseThrow();
+        //        for (String variableName : variableList) {
+        //            Entity entity = entityService.createEntity(winccoaSystemSpec.getId(),
+        //                    Map.of(winccoaEntityKey, variableName), Map.of("application_arcgroup", "CIET_SPSCRB.EVENTHISTORY"));
+        //            //            createdEntities.put(variableName, entity);
+        //            variableService.create(Variable.builder()
+        //                    .systemSpec(winccoaSystemSpec)
+        //                    .variableName(variableName)
+        //                    .configs(ImmutableSortedSet.of(
+        //                            VariableConfig.builder()
+        //                                    .validity(TimeWindow.infinite())
+        //                                    .entityId(entity.getId())
+        //                                    .fieldName("value")
+        //                                    .build()
+        //                    ))
+        //                    .build());
+        //        }
+    }
+
+    public static void main(String[] args) throws IOException {
+        ConfigurableApplicationContext context = SpringApplication.run(HandleNXCALS7964.class, args);
+        EntityService entityService = ServiceClientFactory.createEntityService();
+        VariableService variableService = ServiceClientFactory.createVariableService();
+        SystemSpec winccoaSystemSpec = ServiceClientFactory.createSystemSpecService().findByName(system).orElseThrow();
+
+        // rename entities
+        Map<String, Object>[] keyValues = Arrays.stream(variableList).map(
+                variableName -> Map.of("variable_name", variableName)
+        ).toArray(Map[]::new);
+        Set<Entity> entitiesToRename = entityService.findAll(
+                Entities.suchThat().systemName().eq("WINCCOA").and().keyValues().in(winccoaSystemSpec, keyValues));
+
+        if (entitiesToRename.size() != variableList.length) {
+            Set<String> foundEntities = entitiesToRename.stream().map(Entity::getEntityKeyValues).map(x -> x.toString())
+                    .collect(Collectors.toSet());
+            Set<String> missingVariables = Sets.difference(new HashSet<>(List.of(variableList)), foundEntities);
+            throw new IllegalArgumentException(
+                    "Incorrect variable list, following entities were not found: " + missingVariables);
+        }
+
+        System.out.println(entitiesToRename.size());
+
+        Set<Entity> modifiedEntities = new HashSet<>();
+        for (Entity entity : entitiesToRename) {
+            Map<String, Object> keyValue = entity.getEntityKeyValues();
+            Entity modifiedEntity = entity.toBuilder()
+                    .entityKeyValues(Map.of(winccoaEntityKey, keyValue.get(winccoaEntityKey).toString() + "_old"))
+                    .build();
+            System.out.println(modifiedEntity.getEntityKeyValues());
+            modifiedEntities.add(modifiedEntity);
+        }
+
+        entityService.updateEntities(modifiedEntities);
+
+        //         create a new entities
+        Map<String, Entity> createdEntities = new HashMap<>();
+        for (String variableName : variableList) {
+            Entity entity = entityService.createEntity(winccoaSystemSpec.getId(),
+                    Map.of(winccoaEntityKey, variableName), Map.of("application_arcgroup", "SPSCRABCIET.EVENTHISTORY"));
+            createdEntities.put(variableName, entity);
+        }
+
+        //
+        // find created entities - in case, if variable update fail
+        //        Map<String, Entity> createdEntities = new HashMap<>();
+        //        for (String variableName : variableList) {
+        //            Entity entity = entityService.findOne(Entities.suchThat().systemName().eq(system).and().keyValues()
+        //                    .eq(winccoaSystemSpec, Map.of(winccoaEntityKey, variableName))).orElseThrow();
+        //            createdEntities.put(variableName, entity);
+        //        }
+
+        // update variables
+        Set<Variable> variables = variableService.findAll(Variables.suchThat().variableName().in(variableList));
+
+        if (variables.size() != variableList.length) {
+            Set<String> foundVariableNames = variables.stream().map(Variable::getVariableName)
+                    .collect(Collectors.toSet());
+            Set<String> missingVariables = Sets.difference(new HashSet<>(List.of(variableList)), foundVariableNames);
+            throw new IllegalArgumentException(
+                    "Incorrect variable list, following variables were not found: " + missingVariables);
+        }
+
+        Set<Variable> modifiedVariables = new HashSet<>();
+        Instant now = Instant.now();
+        for (Variable variable : variables) {
+            SortedSet<VariableConfig> configs = new TreeSet<>(variable.getConfigs());
+            VariableConfig closedConfig = null;
+            for (VariableConfig config : new HashSet<>(configs)) {
+                TimeWindow validity = config.getValidity();
+                if (validity.isRightInfinite()) {
+                    configs.remove(config);
+                    configs.add(config.toBuilder().validity(validity.rightLimit(now)).build());
+                    closedConfig = config;
+                }
+            }
+            if (closedConfig == null) {
+                throw new RuntimeException("No variable config was closed!");
+            }
+            configs.add(
+                    VariableConfig.builder()
+                            .entityId(createdEntities.get(variable.getVariableName()).getId())
+                            .fieldName(closedConfig.getFieldName())
+                            .validity(TimeWindow.after(now))
+                            .build()
+            );
+            modifiedVariables.add(variable.toBuilder().configs(configs).build());
+        }
+
+        variableService.updateAll(modifiedVariables);
+        System.out.println("Done!");
+    }
+}
diff --git a/extraction-api-demo/src/main/resources/application.yml b/extraction-api-demo/src/main/resources/application.yml
index 171f9b62f17116eeca3485446a4c43c0e5755aa5..215f0416996345e33c9789b7ac22502bf3cce59f 100644
--- a/extraction-api-demo/src/main/resources/application.yml
+++ b/extraction-api-demo/src/main/resources/application.yml
@@ -55,8 +55,8 @@ spring.profiles.active: prod
 ---
 spring:
   profiles: prod
-spark.masterType: yarn
-#spark.masterType: local[*]
+#spark.masterType: yarn
+spark.masterType: local[*]
 spark.properties:
   spark.submit.deployMode: client