diff --git a/pom.xml b/pom.xml
index cb01717b339b8cea04f084631c0d4a62256db2d9..9daff93b65c02e2ad6e414f8407d83c24a287f0c 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>76f49ed</woken-messages.version>
+        <woken-messages.version>ee60327</woken-messages.version>
         <javax-inject.version>1</javax-inject.version>
         <akka.version>2.3.14</akka.version>
         <spring-context.version>4.3.4.RELEASE</spring-context.version>
@@ -64,9 +64,9 @@
             <snapshots>
                 <enabled>false</enabled>
             </snapshots>
-            <id>bintray-lren-chuv-mip-portal</id>
-            <name>bintray</name>
-            <url>http://dl.bintray.com/lren-chuv/mip-portal</url>
+            <id>artifactory-libs-release-local</id>
+            <name>artifactory</name>
+            <url>http://hbps1.chuv.ch/artifactory/libs-release-local</url>
         </repository>
     </repositories>
 
@@ -235,9 +235,9 @@
             <snapshots>
                 <enabled>false</enabled>
             </snapshots>
-            <id>bintray-lren-chuv-mip-portal</id>
-            <name>bintray-plugins</name>
-            <url>http://dl.bintray.com/lren-chuv/mip-portal</url>
+            <id>artifactory-libs-release-local</id>
+            <name>artifactory-plugins</name>
+            <url>http://hbps1.chuv.ch/artifactory/libs-release-local</url>
         </pluginRepository>
     </pluginRepositories>
 
diff --git a/src/main/java/eu/hbp/mip/controllers/ModelsApi.java b/src/main/java/eu/hbp/mip/controllers/ModelsApi.java
index 3a13867b86dc3cb0db2692b332f90b007c9d883d..77b74ad65add6b47f07a910f70fa69b04c54198f 100644
--- a/src/main/java/eu/hbp/mip/controllers/ModelsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ModelsApi.java
@@ -281,10 +281,12 @@ public class ModelsApi {
         allVars.addAll(model.getDataset().getHeader());
         allVars.addAll(model.getDataset().getGrouping());
 
+        String filters = model.getQuery().getFilters();
+
         Gson gson = new Gson();
         JsonObject jsonModel = gson.fromJson(gson.toJson(model, Model.class), JsonObject.class);
         jsonModel.get("dataset").getAsJsonObject()
-                .add("data", dataUtil.getDataFromVariables(allVars));
+                .add("data", dataUtil.getDataFromVariables(allVars, filters));
 
         return gson.fromJson(jsonModel, Model.class);
     }
diff --git a/src/main/java/eu/hbp/mip/controllers/RequestsApi.java b/src/main/java/eu/hbp/mip/controllers/RequestsApi.java
index 5477047d41d664c8372621fdea4437113f969b8d..3ef2931c8460f93ecd8c505fed47f02c68c9ed2f 100644
--- a/src/main/java/eu/hbp/mip/controllers/RequestsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/RequestsApi.java
@@ -62,21 +62,19 @@ public class RequestsApi {
         List<String> variables = extractVarCodes(q, "variables");
         List<String> groupings = extractVarCodes(q, "grouping");
         List<String> covariables = extractVarCodes(q, "covariables");
-        List<String> filters = extractVarCodes(q, "filter");
+        String filters = extractFilters(q, "filters");
 
         List<String> allVars = new LinkedList<>();
         allVars.addAll(variables);
         allVars.addAll(groupings);
         allVars.addAll(covariables);
-        allVars.addAll(filters);
 
         dataset.addProperty("code", code);
         dataset.addProperty("date", date.getTime());
         dataset.add("variable", gson.toJsonTree(variables));
         dataset.add("grouping", gson.toJsonTree(groupings));
         dataset.add("header", gson.toJsonTree(covariables));
-        dataset.add("filter", gson.toJsonTree(filters));
-        dataset.add("data", dataUtil.getDataFromVariables(allVars));
+        dataset.add("data", dataUtil.getDataFromVariables(allVars, filters));
 
         return ResponseEntity.ok(gson.fromJson(dataset, Object.class));
     }
@@ -91,6 +89,9 @@ public class RequestsApi {
         return codes;
     }
 
+    private String extractFilters(JsonObject q, String field) {
+        return q.getAsJsonPrimitive(field).getAsString();
+    }
 
     private String generateDSCode(Query query) {
         String prefix = "DS";
diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index ba05e3e0037dec9348a30bd625bb47d40efb2f6d..762d055af8ddcbbc3aaf6551847b8d3639aa3bb7 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -114,14 +114,14 @@ public class Experiment {
                 TypesConvert.variablesToVariableIds(model.getQuery().getCovariables()).iterator()).asScala().toSeq().toList();
         Seq<VariableId> groupingSeq = JavaConverters.asScalaIteratorConverter(
                 TypesConvert.variablesToVariableIds(model.getQuery().getGrouping()).iterator()).asScala().toSeq().toList();
-        Seq<Filter> filtersSeq = JavaConverters.asScalaIteratorConverter(
-                new LinkedList<Filter>().iterator()).asScala().toSeq().toList();
         Seq<Algorithm> algorithmsSeq = JavaConverters.asScalaIteratorConverter(
                 algorithms.iterator()).asScala().toSeq().toList();
         Seq<Validation> validationsSeq = JavaConverters.asScalaIteratorConverter(
                 validations.iterator()).asScala().toSeq().toList();
 
-        return new ExperimentQuery(variablesSeq, covariablesSeq, groupingSeq, filtersSeq, algorithmsSeq, validationsSeq);
+        String filters = model.getQuery().getFilters();
+
+        return new ExperimentQuery(variablesSeq, covariablesSeq, groupingSeq, filters, algorithmsSeq, validationsSeq);
     }
 
 
diff --git a/src/main/java/eu/hbp/mip/model/MiningQuery.java b/src/main/java/eu/hbp/mip/model/MiningQuery.java
index 378b65330e6a17502423184d116e0b56b85b8992..e1bae7d4b33c80beb8203c44140d3452e683381c 100644
--- a/src/main/java/eu/hbp/mip/model/MiningQuery.java
+++ b/src/main/java/eu/hbp/mip/model/MiningQuery.java
@@ -1,13 +1,11 @@
 package eu.hbp.mip.model;
 
 import com.google.gson.Gson;
-import eu.hbp.mip.messages.external.Filter;
 import eu.hbp.mip.messages.external.VariableId;
 import eu.hbp.mip.utils.TypesConvert;
 import scala.collection.JavaConverters;
 import scala.collection.Seq;
 
-import java.util.LinkedList;
 import java.util.List;
 
 /**
@@ -18,7 +16,7 @@ public class MiningQuery {
     private List<Variable> variables;
     private List<Variable> covariables;
     private List<Variable> grouping;
-    private List<Filter> filters;
+    private String filters;
     private Algorithm algorithm;
 
     public List<Variable> getVariables() {
@@ -45,11 +43,11 @@ public class MiningQuery {
         this.grouping = grouping;
     }
 
-    public List<Filter> getFilters() {
+    public String getFilters() {
         return filters;
     }
 
-    public void setFilters(List<Filter> filters) {
+    public void setFilters(String filters) {
         this.filters = filters;
     }
 
@@ -72,10 +70,9 @@ public class MiningQuery {
                 TypesConvert.variablesToVariableIds(covariables).iterator()).asScala().toSeq().toList();
         Seq<VariableId> groupingSeq = JavaConverters.asScalaIteratorConverter(
                 TypesConvert.variablesToVariableIds(grouping).iterator()).asScala().toSeq().toList();
-        Seq<Filter> filtersSeq = JavaConverters.asScalaIteratorConverter(
-                new LinkedList<Filter>().iterator()).asScala().toSeq().toList();
 
-        return new eu.hbp.mip.messages.external.MiningQuery(variablesSeq, covariablesSeq,groupingSeq,filtersSeq, scalaAlgorithm);
+        return new eu.hbp.mip.messages.external.MiningQuery(
+                variablesSeq, covariablesSeq, groupingSeq, filters, scalaAlgorithm);
     }
 
     @Override
diff --git a/src/main/java/eu/hbp/mip/model/Model.java b/src/main/java/eu/hbp/mip/model/Model.java
index d788436a6d9a5b0c42fa1b616cdcc3be443ed1a0..8b25b7410a1ade9885002a21d23c3c50368b3d46 100644
--- a/src/main/java/eu/hbp/mip/model/Model.java
+++ b/src/main/java/eu/hbp/mip/model/Model.java
@@ -54,9 +54,6 @@ public class Model {
     @JoinColumn(name = "updatedby_username")
     private User updatedBy = null;
 
-    @Column(columnDefinition = "text")
-    private String textQuery = null;
-
 
     public Model() {
         /*
@@ -163,13 +160,4 @@ public class Model {
         this.updatedBy = updatedBy;
     }
 
-
-    public String getTextQuery() {
-        return textQuery;
-    }
-
-    public void setTextQuery(String textQuery) {
-    this.textQuery = textQuery;
-    }
-
 }
diff --git a/src/main/java/eu/hbp/mip/model/Query.java b/src/main/java/eu/hbp/mip/model/Query.java
index 9073b12360ee537a51d341fdafc0cf4335965b5a..e0a07582837846540b3cc26201f806db8b8ee74d 100644
--- a/src/main/java/eu/hbp/mip/model/Query.java
+++ b/src/main/java/eu/hbp/mip/model/Query.java
@@ -47,15 +47,8 @@ public class Query {
                     nullable = false, updatable = false) })
     private List<Variable> grouping = new LinkedList<>();
 
-    @ManyToMany
-    @JoinTable(name = "query_filter", joinColumns = {
-            @JoinColumn(name = "query_id", nullable = false, updatable = false) },
-            inverseJoinColumns = { @JoinColumn(name = "code",
-                    nullable = false, updatable = false) })
-    private List<Variable> filters = new LinkedList<>();
-
-    @Column(columnDefinition = "text", name = "sql_filter")
-    private String sqlFilter = null;
+    @Column(columnDefinition = "text")
+    private String filters = "";
 
 
     public Query() {
@@ -103,12 +96,11 @@ public class Query {
     }
 
 
-    @JsonProperty("filter")
-    public List<Variable> getFilters() {
+    public String getFilters() {
         return filters;
     }
 
-    public void setFilters(List<Variable> filters) {
+    public void setFilters(String filters) {
         this.filters = filters;
     }
 
@@ -120,13 +112,4 @@ public class Query {
         this.request = request;
     }
 
-
-    @JsonProperty("sql_filter")
-    public String getSqlFilter() {
-        return sqlFilter;
-    }
-
-    public void setSqlFilter(String sqlFilter) {
-        this.sqlFilter = sqlFilter;
-    }
 }
diff --git a/src/main/java/eu/hbp/mip/utils/DataUtil.java b/src/main/java/eu/hbp/mip/utils/DataUtil.java
index 4ce7416bcff58acd7a71e631db0a76e6465489ff..3d1d872d779766dc2948b3ff66a751ce0afedca8 100644
--- a/src/main/java/eu/hbp/mip/utils/DataUtil.java
+++ b/src/main/java/eu/hbp/mip/utils/DataUtil.java
@@ -26,7 +26,7 @@ public class DataUtil {
     }
 
     @Cacheable("varsdata")
-    public JsonObject getDataFromVariables(List<String> vars)
+    public JsonObject getDataFromVariables(List<String> vars, String filters)
     {
         JsonObject data = new JsonObject();
 
@@ -40,8 +40,8 @@ public class DataUtil {
                 long nb_samples = Math.min(nbRows, MAX_NB_SAMPLES);
                 int samplingPercentage = (int) (100 * nb_samples / nbRows);
                 List<Object> queryResult = jdbcTemplate.queryForList(
-                        String.format("SELECT %s FROM %s TABLESAMPLE SYSTEM (%d) REPEATABLE (%d)",
-                                var, featuresMainTable, samplingPercentage, TABLESAMPLE_SEED),
+                        String.format("SELECT %s FROM %s TABLESAMPLE SYSTEM (%d) REPEATABLE (%d) WHERE %s",
+                                var, featuresMainTable, samplingPercentage, TABLESAMPLE_SEED, filters),
                         Object.class);
                 for (Object value : queryResult) {
                     if (value == null) {
@@ -73,6 +73,11 @@ public class DataUtil {
         return data;
     }
 
+    public JsonObject getDataFromVariables(List<String> vars)
+    {
+        return getDataFromVariables(vars);
+    }
+
     @Cacheable("colscount")
     public long countVariables()
     {