diff --git a/pom.xml b/pom.xml
index 31aa67151b7ba7d044836df2aefe525f068dd0a5..3ad3b0402c63532ba6d93beec400961b04cde903 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,9 +47,9 @@
         <spring-data-jpa.version>1.10.11.RELEASE</spring-data-jpa.version>
         <spring-boot-starter-actuator.version>1.4.7.RELEASE</spring-boot-starter-actuator.version>
         <aspectjweaver.version>1.8.9</aspectjweaver.version>
-        <woken-messages.version>2.8.1</woken-messages.version>
+        <woken-messages.version>2.8.4</woken-messages.version>
         <javax-inject.version>1</javax-inject.version>
-        <akka.version>2.5.18</akka.version>
+        <akka.version>2.5.19</akka.version>
         <spring-context.version>4.3.4.RELEASE</spring-context.version>
         <protobuf-java.version>3.1.0</protobuf-java.version>
 
diff --git a/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java b/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java
index 59375f7ab4916753bf108ead11e9a37d9ebd59cd..d85bf5d3afbee20d3f03c4b37b864636c0892ff5 100644
--- a/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java
+++ b/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java
@@ -90,9 +90,17 @@ class AkkaConfiguration {
             }
         }
 
-        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
-                    cluster.leave(cluster.selfAddress());
-                })
+        final Runnable leaveCluster = () -> cluster.leave(cluster.selfAddress());
+        actorSystem().registerOnTermination(leaveCluster);
+
+        cluster.registerOnMemberRemoved( () -> {
+            LOGGER.info("Exiting...");
+            cluster.leave(cluster.selfAddress());
+            actorSystem().registerOnTermination(() -> System.exit(0));
+            actorSystem().terminate();
+        });
+
+        Runtime.getRuntime().addShutdownHook(new Thread(leaveCluster)
         );
 
         LOGGER.info("Step 3/3: Cluster connected to Woken.");
diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index 33d5530a24318fb50d66a72c3c11d71a3dc2c479..5fb1e24a78a929641a5a3010946d812bfd60dcf1 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -97,7 +97,7 @@ public class Experiment {
 
     public ExperimentQuery prepareQuery(String user) {
         if (model == null || model.getQuery() == null)
-            return new ExperimentQuery(null, null, null, null, null, Option.empty(), null, null, null, null, null, null);
+            return new ExperimentQuery(null, null, null, false,null, null, Option.empty(), null, null, null, null, null, null);
 
         List<AlgorithmSpec> algorithms = new LinkedList<>();
         Type algoList = new TypeToken<LinkedList<eu.hbp.mip.model.Algorithm>>(){}.getType();
@@ -131,7 +131,8 @@ public class Experiment {
         Option<FilterRule> filters = conv.toFilterRule(filtersJson);
         UserId userId = new UserId(user);
 
-        return new ExperimentQuery(userId, variablesSeq, covariablesSeq, groupingSeq, filters, Option.empty(),
+        // TODO: covariablesMustExist argument should be set from a user intention? Or maybe automatically selected based on the list of algorithms???
+        return new ExperimentQuery(userId, variablesSeq, covariablesSeq, false, groupingSeq, filters, Option.empty(),
                 trainingDatasets, testingDatasets, algorithmsSeq, validationDatasets,
                 validationsSeq, Option.empty());
     }
diff --git a/src/main/java/eu/hbp/mip/model/MiningQuery.java b/src/main/java/eu/hbp/mip/model/MiningQuery.java
index 908ef52193221feec68520c88662d9e3ac7b5b56..5ad30ea89fd1c246647f8f62aff9d79f07040a06 100644
--- a/src/main/java/eu/hbp/mip/model/MiningQuery.java
+++ b/src/main/java/eu/hbp/mip/model/MiningQuery.java
@@ -106,7 +106,7 @@ public class MiningQuery {
         Option<FilterRule> filters = conv.toFilterRule(filtersJson);
 
         return new ch.chuv.lren.woken.messages.query.MiningQuery(userId,
-                variablesSeq, covariablesSeq, groupingSeq, filters, Option.empty(), datasets, scalaAlgorithm, Option.empty());
+                variablesSeq, covariablesSeq, true, groupingSeq, filters, Option.empty(), datasets, scalaAlgorithm, Option.empty());
     }
 
     @Override