diff --git a/pom.xml b/pom.xml
index 51120dec5649e3dee5ec64f7514c6e2c26111f0f..10f3ce7b4dfcc7dbc7fefc4e37408bf2bad01b81 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,7 +47,7 @@
         <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.2.4</woken-messages.version>
+        <woken-messages.version>2.3.0</woken-messages.version>
         <javax-inject.version>1</javax-inject.version>
         <akka.version>2.5.9</akka.version>
         <spring-context.version>4.3.4.RELEASE</spring-context.version>
@@ -366,7 +366,7 @@
                             <version>${scala.release.version}</version>
                         </dependency>
                     </defineCompiler>
-                    <definePluginList></definePluginList>
+                    <definePluginList/>
                 </configuration>
                 <executions>
                     <execution>
diff --git a/src/main/java/eu/hbp/mip/akka/ExperimentActor.java b/src/main/java/eu/hbp/mip/akka/ExperimentActor.java
index bd597509931962be9e68063441231268bc401855..3d184d2d1be1f930cca35433370b932aa4714631 100644
--- a/src/main/java/eu/hbp/mip/akka/ExperimentActor.java
+++ b/src/main/java/eu/hbp/mip/akka/ExperimentActor.java
@@ -1,7 +1,7 @@
 package eu.hbp.mip.akka;
 
 import akka.actor.AbstractActor;
-import eu.hbp.mip.woken.messages.external.QueryResult;
+import eu.hbp.mip.woken.messages.query.QueryResult;
 import eu.hbp.mip.model.Experiment;
 import eu.hbp.mip.repositories.ExperimentRepository;
 import org.apache.log4j.Logger;
diff --git a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
index 8f21186185f244ad20ac067840aad94281284fa7..3f4c865ab47b92c3936531058e03588adadfdf71 100644
--- a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
@@ -19,8 +19,8 @@ import eu.hbp.mip.repositories.ExperimentRepository;
 import eu.hbp.mip.repositories.ModelRepository;
 import eu.hbp.mip.utils.HTTPUtil;
 import eu.hbp.mip.utils.JSONUtil;
-import eu.hbp.mip.woken.messages.external.MethodsQuery$;
-import eu.hbp.mip.woken.messages.external.MethodsResponse;
+import eu.hbp.mip.woken.messages.query.MethodsQuery$;
+import eu.hbp.mip.woken.messages.query.MethodsResponse;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -82,10 +82,10 @@ public class ExperimentApi {
     private ExperimentRepository experimentRepository;
 
     @Autowired
-    public ActorSystem actorSystem;
+    private ActorSystem actorSystem;
 
     @Autowired
-    public String wokenRefPath;
+    private String wokenRefPath;
 
 
     @ApiOperation(value = "Send a request to the workflow to run an experiment", response = Experiment.class)
@@ -303,8 +303,10 @@ public class ExperimentApi {
     }
 
     private void sendExperiment(Experiment experiment) throws MalformedURLException {
+        User user = securityConfiguration.getUser();
+
         // this runs in the background. For future optimization: use a thread pool
-        final eu.hbp.mip.woken.messages.external.ExperimentQuery experimentQuery = experiment.prepareQuery();
+        final eu.hbp.mip.woken.messages.query.ExperimentQuery experimentQuery = experiment.prepareQuery(user.getUsername());
 
         LOGGER.info("Akka is trying to reach remote " + wokenRefPath);
         ActorSelection wokenActor = actorSystem.actorSelection(wokenRefPath);
diff --git a/src/main/java/eu/hbp/mip/controllers/MiningApi.java b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
index 97535eceb5232e25ba2bdb7e2753b68cf7d8ccec..da2bee0478d467e395198afab130aee52c78c20c 100644
--- a/src/main/java/eu/hbp/mip/controllers/MiningApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
@@ -6,7 +6,7 @@ import akka.pattern.Patterns;
 import akka.util.Timeout;
 import com.google.gson.Gson;
 import eu.hbp.mip.model.Mining;
-import eu.hbp.mip.woken.messages.external.QueryResult;
+import eu.hbp.mip.woken.messages.query.QueryResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.log4j.Logger;
diff --git a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
index e3eeadaf38b5285a1b10bbc41eca64da1fc33cb9..96c6389cb9fb52355aea7227b58efb7c13c4a719 100644
--- a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
@@ -12,6 +12,7 @@ import com.google.gson.JsonObject;
 import eu.hbp.mip.configuration.SecurityConfiguration;
 import eu.hbp.mip.model.Algorithm;
 import eu.hbp.mip.model.MiningQuery;
+import eu.hbp.mip.model.User;
 import eu.hbp.mip.model.Variable;
 import io.swagger.annotations.*;
 import org.apache.log4j.Logger;
@@ -151,13 +152,15 @@ public class VariablesApi {
     )  {
         LOGGER.info("Get query for histograms");
 
+        User user = securityConfiguration.getUser();
+
         String sqlQuery = String.format(
                 "SELECT histogram_groupings FROM meta_variables where upper(target_table)='%s'", featuresMainTable.toUpperCase());
         SqlRowSet data = metaJdbcTemplate.queryForRowSet(sqlQuery);
         data.next();
         String histogramGroupings = data.getString("histogram_groupings");
 
-        MiningQuery query = new MiningQuery();
+        MiningQuery query = new MiningQuery(user.getUsername());
         query.addVariable(new Variable(code));
         List<String> newGroups = Arrays.asList(histogramGroupings.split(","));
         List<Variable> groupings = query.getGrouping();
diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index 2410eecd0a0eb75b673ff74fde02a4816561ca1f..c84c21b1a6983549e2a13c13b8edba5b4001bf67 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -1,15 +1,21 @@
 package eu.hbp.mip.model;
 
+import ch.chuv.lren.mip.portal.WokenConversions;
 import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import com.google.gson.annotations.Expose;
 import com.google.gson.reflect.TypeToken;
-import eu.hbp.mip.woken.messages.external.ExperimentQuery;
-import eu.hbp.mip.woken.messages.external.*;
+import eu.hbp.mip.woken.messages.datasets.DatasetId;
+import eu.hbp.mip.woken.messages.query.ExperimentQuery;
+import eu.hbp.mip.woken.messages.query.*;
 import eu.hbp.mip.utils.TypesConvert;
+import eu.hbp.mip.woken.messages.query.filters.FilterRule;
+import eu.hbp.mip.woken.messages.variables.FeatureIdentifier;
 import org.hibernate.annotations.Cascade;
+import scala.None$;
+import scala.Option;
 import scala.collection.JavaConversions;
 
 import javax.persistence.*;
@@ -104,19 +110,28 @@ public class Experiment {
             validations.add(new ValidationSpec(v.getCode(), TypesConvert.algoParamsToScala(v.getParameters())));
         }
 
-        scala.collection.immutable.List<VariableId> variablesSeq =
-                TypesConvert.variablesToVariableIds(model.getQuery().getVariables());
-        scala.collection.immutable.List<VariableId> covariablesSeq =
-                TypesConvert.variablesToVariableIds(model.getQuery().getCovariables());
-        scala.collection.immutable.List<VariableId> groupingSeq =
-                TypesConvert.variablesToVariableIds(model.getQuery().getGrouping());
+        scala.collection.immutable.List<FeatureIdentifier> variablesSeq =
+                TypesConvert.variablesToIdentifiers(model.getQuery().getVariables());
+        scala.collection.immutable.List<FeatureIdentifier> covariablesSeq =
+                TypesConvert.variablesToIdentifiers(model.getQuery().getCovariables());
+        scala.collection.immutable.List<FeatureIdentifier> groupingSeq =
+                TypesConvert.variablesToIdentifiers(model.getQuery().getGrouping());
         scala.collection.immutable.List<AlgorithmSpec> algorithmsSeq = JavaConversions.asScalaBuffer(algorithms).toList();
         scala.collection.immutable.List<ValidationSpec> validationsSeq = JavaConversions.asScalaBuffer(validations).toList();
 
-        String filters = model.getQuery().getFilters();
+        // TODO - set values
+        WokenConversions conv = new WokenConversions();
+        scala.collection.immutable.Set<DatasetId> trainingDatasets = conv.toDatasets("");
+        scala.collection.immutable.Set<DatasetId> testingDatasets = conv.toDatasets("");
+        scala.collection.immutable.Set<DatasetId> validationDatasets = conv.toDatasets("");
+
+        String filtersJson = model.getQuery().getFilters();
+        Option<FilterRule> filters = conv.toFilterRule(filtersJson);
         UserId userId = new UserId(user);
 
-        return new ExperimentQuery(user, variablesSeq, covariablesSeq, groupingSeq, filters, algorithmsSeq, validationsSeq);
+        return new ExperimentQuery(userId, variablesSeq, covariablesSeq, groupingSeq, filters,
+                trainingDatasets, testingDatasets, algorithmsSeq, validationDatasets,
+                validationsSeq, None$.empty());
     }
 
 
diff --git a/src/main/java/eu/hbp/mip/model/MiningQuery.java b/src/main/java/eu/hbp/mip/model/MiningQuery.java
index 2ef84a8eaa463c4959d4659b27bb615abb026f11..09bd4a576449a8397d5b7fb81a98801d4d2e6725 100644
--- a/src/main/java/eu/hbp/mip/model/MiningQuery.java
+++ b/src/main/java/eu/hbp/mip/model/MiningQuery.java
@@ -1,9 +1,13 @@
 package eu.hbp.mip.model;
 
+import ch.chuv.lren.mip.portal.WokenConversions;
 import com.google.gson.Gson;
-import eu.hbp.mip.woken.messages.external.UserId;
-import eu.hbp.mip.woken.messages.external.VariableId;
 import eu.hbp.mip.utils.TypesConvert;
+import eu.hbp.mip.woken.messages.datasets.DatasetId;
+import eu.hbp.mip.woken.messages.query.UserId;
+import eu.hbp.mip.woken.messages.query.filters.FilterRule;
+import eu.hbp.mip.woken.messages.variables.FeatureIdentifier;
+import scala.Option;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -78,18 +82,27 @@ public class MiningQuery {
         this.algorithm = algorithm;
     }
 
-    public eu.hbp.mip.woken.messages.external.MiningQuery prepareQuery() {
+    public eu.hbp.mip.woken.messages.query.MiningQuery prepareQuery() {
 
-        eu.hbp.mip.woken.messages.external.AlgorithmSpec scalaAlgorithm = new eu.hbp.mip.woken.messages.external.AlgorithmSpec(
+        eu.hbp.mip.woken.messages.query.AlgorithmSpec scalaAlgorithm = new eu.hbp.mip.woken.messages.query.AlgorithmSpec(
                 algorithm.getCode(), TypesConvert.algoParamsToScala(algorithm.getParameters()));
 
-        scala.collection.immutable.List<VariableId> variablesSeq = TypesConvert.variablesToVariableIds(variables);
-        scala.collection.immutable.List<VariableId> covariablesSeq = TypesConvert.variablesToVariableIds(covariables);
-        scala.collection.immutable.List<VariableId> groupingSeq = TypesConvert.variablesToVariableIds(grouping);
+        scala.collection.immutable.List<FeatureIdentifier> variablesSeq =
+                TypesConvert.variablesToIdentifiers(getVariables());
+        scala.collection.immutable.List<FeatureIdentifier> covariablesSeq =
+                TypesConvert.variablesToIdentifiers(getCovariables());
+        scala.collection.immutable.List<FeatureIdentifier> groupingSeq =
+                TypesConvert.variablesToIdentifiers(getGrouping());
         UserId userId = new UserId(user);
 
-        return new eu.hbp.mip.woken.messages.external.MiningQuery(userId,
-                variablesSeq, covariablesSeq, groupingSeq, filters, scalaAlgorithm);
+        // TODO - set values
+        WokenConversions conv = new WokenConversions();
+        scala.collection.immutable.Set<DatasetId> datasets = conv.toDatasets("");
+        String filtersJson = getFilters();
+        Option<FilterRule> filters = conv.toFilterRule(filtersJson);
+
+        return new eu.hbp.mip.woken.messages.query.MiningQuery(userId,
+                variablesSeq, covariablesSeq, groupingSeq, filters, datasets, scalaAlgorithm);
     }
 
     @Override
diff --git a/src/main/java/eu/hbp/mip/utils/TypesConvert.java b/src/main/java/eu/hbp/mip/utils/TypesConvert.java
index 42cc99520d3c5068a2dd0ba0ca911d6e3de047d5..b4270bde5666fb60f7feeafc85829b604ee8093e 100644
--- a/src/main/java/eu/hbp/mip/utils/TypesConvert.java
+++ b/src/main/java/eu/hbp/mip/utils/TypesConvert.java
@@ -1,7 +1,8 @@
 package eu.hbp.mip.utils;
 
-import eu.hbp.mip.woken.messages.external.CodeValue;
-import eu.hbp.mip.woken.messages.external.VariableId;
+import eu.hbp.mip.woken.messages.query.CodeValue;
+import eu.hbp.mip.woken.messages.variables.FeatureIdentifier;
+import eu.hbp.mip.woken.messages.variables.VariableId;
 import eu.hbp.mip.model.AlgorithmParam;
 import eu.hbp.mip.model.Variable;
 import scala.collection.JavaConversions;
@@ -15,8 +16,8 @@ import java.util.stream.Collectors;
  */
 public class TypesConvert {
 
-    public static scala.collection.immutable.List<VariableId> variablesToVariableIds(List<Variable> vars) {
-        List<VariableId> varIds = new LinkedList<>();
+    public static scala.collection.immutable.List<FeatureIdentifier> variablesToIdentifiers(List<Variable> vars) {
+        List<FeatureIdentifier> varIds = new LinkedList<>();
         for (Variable v: vars) {
             varIds.add(new VariableId(v.getCode()));
         }
diff --git a/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala b/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala
new file mode 100644
index 0000000000000000000000000000000000000000..0e90d1f3b512fd3f4f4cd931d216464b308d669e
--- /dev/null
+++ b/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala
@@ -0,0 +1,19 @@
+package ch.chuv.lren.mip.portal
+
+import eu.hbp.mip.woken.messages.datasets.DatasetId
+import eu.hbp.mip.woken.messages.query.filters.FilterRule
+import eu.hbp.mip.woken.messages.query.filters.queryFiltersProtocol._
+import org.springframework.stereotype.Component
+import spray.json._
+
+@Component
+class WokenConversions {
+
+  def toFilterRule(json: String): Option[FilterRule] = Some(json).map(_.parseJson.convertTo[FilterRule])
+
+  def toDatasets(commaSeparatedSets: String): Set[DatasetId] = commaSeparatedSets match {
+    case "" => Set()
+    case _  => commaSeparatedSets.split(",").map(DatasetId).toSet
+  }
+
+}