diff --git a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
index c1639df2df9b732b0fcc51f789f06d2be8a38ea5..3ede8eef82655aedc43b7abb6044fbfee3d98fe7 100644
--- a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
@@ -6,6 +6,7 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import eu.hbp.mip.akka.WokenClientController;
 import eu.hbp.mip.configuration.SecurityConfiguration;
+import eu.hbp.mip.model.AlgorithmParam;
 import eu.hbp.mip.model.Experiment;
 import eu.hbp.mip.model.ExperimentQuery;
 import eu.hbp.mip.model.User;
@@ -83,12 +84,12 @@ public class ExperimentApi extends WokenClientController {
 
         LOGGER.info("Experiment saved");
 
-        if (isExaremeAlgo(expQuery)) {
-            String algoCode = expQuery.getAlgorithms().get(0).getCode();
-            sendExaremeExperiment(experiment, algoCode);
-        }
-        else {
+        if (!experiment.isExaremeAlgorithm()) {
             sendExperiment(experiment);
+        } else {
+            String algoCode = expQuery.getAlgorithms().get(0).getCode();
+            List<AlgorithmParam> params =  expQuery.getAlgorithms().get(0).getParameters();
+            sendExaremeExperiment(experiment, algoCode, params);
         }
 
         return new ResponseEntity<>(gsonOnlyExposed.toJson(experiment.jsonify()), HttpStatus.OK);
@@ -286,11 +287,11 @@ public class ExperimentApi extends WokenClientController {
         }, ec);
     }
 
-    private void sendExaremeExperiment(Experiment experiment, String algoCode) {
+    private void sendExaremeExperiment(Experiment experiment, String algoCode, List <AlgorithmParam> params) {
         // >> Temporary: we should integrate exareme in a proper way in the future
         // this runs in the background. For future optimization: use a thread pool
         new Thread(() -> {
-            String query = experiment.computeExaremeQuery();
+            String query = experiment.computeExaremeQuery(params);
             String url = miningExaremeQueryUrl + "/" + algoCode;
             // Results are stored in the experiment object
             try {
@@ -322,13 +323,4 @@ public class ExperimentApi extends WokenClientController {
 
         LOGGER.info("Experiment updated (finished)");
     }
-
-    private static boolean isExaremeAlgo(ExperimentQuery expQuery) {
-        String code = expQuery.getAlgorithms().get(0).getCode();
-        return expQuery.getAlgorithms().size() > 0
-                && ("WP_".equals(code.substring(0, 3))
-                || "glm_exareme".equals(code)
-                || "K_MEANS".equals(code));
-    }
-
 }
diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index 38e535cb52d51f978d14f1a01673bcc6df971aa6..f4880376fd22297bdb22f90b096424afd7dd7b47 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -1,10 +1,7 @@
 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.*;
 import com.google.gson.annotations.Expose;
 import com.google.gson.reflect.TypeToken;
 import ch.chuv.lren.woken.messages.datasets.DatasetId;
@@ -21,10 +18,7 @@ import scala.collection.JavaConversions;
 
 import javax.persistence.*;
 import java.lang.reflect.Type;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
 
 
 /**
@@ -137,44 +131,60 @@ public class Experiment {
     }
 
 
-    public String computeExaremeQuery() {
+    public String computeExaremeQuery(List<AlgorithmParam> params) {
         List<ExaremeQueryElement> queryElements = new LinkedList<>();
-        for (Variable var : model.getQuery().getVariables())
+
+        // columns
+        List<String> columns = new ArrayList<>();
+        for (Variable var : model.getQuery().getVariables()) { columns.add(var.getCode()); }
+        for (Variable var : model.getQuery().getCovariables()) { columns.add(var.getCode()); }
+        for (Variable var : model.getQuery().getGrouping()) { columns.add(var.getCode()); }
+        StringBuilder sb = new StringBuilder();
+        int i = 0;
+        for (String s : columns)
         {
-            ExaremeQueryElement el = new ExaremeQueryElement();
-            el.setName("variable");
-            el.setDesc("");
-            el.setValue(var.getCode());
-            queryElements.add(el);
+            i++;
+            sb.append(s);
+            if (i < columns.size()) {
+                sb.append(",");
+            }
         }
-        for (Variable var : model.getQuery().getCovariables())
-        {
-            ExaremeQueryElement el = new ExaremeQueryElement();
-            el.setName("covariables");
-            el.setDesc("");
-            el.setValue(var.getCode());
-            queryElements.add(el);
+        ExaremeQueryElement columnsEl = new ExaremeQueryElement();
+        columnsEl.setName("columns");
+        columnsEl.setDesc("");
+        columnsEl.setValue(sb.toString());
+        queryElements.add(columnsEl);
+
+        // parameters
+        if (params != null) {
+            for (AlgorithmParam p : params)
+            {
+                ExaremeQueryElement paramEl = new ExaremeQueryElement();
+                paramEl.setName(p.getCode());
+                paramEl.setDesc("");
+                paramEl.setValue(p.getValue());
+                queryElements.add(paramEl);
+            }
         }
-        for (Variable var : model.getQuery().getGrouping())
+
+        // datasets
+        StringBuilder datasets = new StringBuilder();
+        List<Variable> trainingDatasets = model.getQuery().getTrainingDatasets();
+        int j = 0;
+        for (Variable var : trainingDatasets)
         {
-            ExaremeQueryElement el = new ExaremeQueryElement();
-            el.setName("groupings");
-            el.setDesc("");
-            el.setValue(var.getCode());
-            queryElements.add(el);
+            j++;
+            datasets.append(var.getCode());
+            if (j < trainingDatasets.size() ) {
+                datasets.append(",");
+            }
         }
 
-        ExaremeQueryElement tableEl = new ExaremeQueryElement();
-        tableEl.setName("showtable");
-        tableEl.setDesc("");
-        tableEl.setValue("TotalResults");
-        queryElements.add(tableEl);
-
-        ExaremeQueryElement formatEl = new ExaremeQueryElement();
-        formatEl.setName("format");
-        formatEl.setDesc("");
-        formatEl.setValue("True");
-        queryElements.add(formatEl);
+        ExaremeQueryElement datasetsEl = new ExaremeQueryElement();
+        datasetsEl.setName("dataset");
+        datasetsEl.setDesc("");
+        datasetsEl.setValue(datasets.toString());
+        queryElements.add(datasetsEl);
 
         return gson.toJson(queryElements);
     }
@@ -197,11 +207,30 @@ public class Experiment {
             exp.add("validations", jsonValidations);
         }
 
-        if (this.result != null && !this.hasServerError)
-        {
+        if (this.result != null && !this.hasServerError) {
             exp.remove("result");
-            JsonArray jsonResult = parser.parse(this.result).getAsJsonArray();
-            exp.add("result", jsonResult);
+
+            if (!this.isExaremeAlgorithm()) {
+                JsonArray jsonResult = parser.parse(this.result).getAsJsonArray();
+                exp.add("result", jsonResult);
+            } else {
+                JsonArray jsonArrayResult = new JsonArray();
+                JsonObject jsonObjectResult = new JsonObject();
+                exp.remove("result");
+
+                JsonObject jsonData = parser.parse(this.result).getAsJsonArray().get(0).getAsJsonObject();
+                jsonObjectResult.add("data", jsonData);
+
+                JsonObject algoObject = parser.parse(this.algorithms).getAsJsonArray().get(0).getAsJsonObject();
+                jsonObjectResult.add("algorithm", algoObject.get("name"));
+                jsonObjectResult.add("code", algoObject.get("code"));
+
+                jsonObjectResult.add("type", new JsonPrimitive("application/vnd.highcharts+json"));
+
+                jsonArrayResult.add(jsonObjectResult);
+
+                exp.add("result", jsonArrayResult);
+            }
         }
 
         return exp;
@@ -310,4 +339,12 @@ public class Experiment {
     public void setShared(boolean shared) {
         this.shared = shared;
     }
+
+    public boolean isExaremeAlgorithm() {
+        String algorithms = this.algorithms;
+        Boolean isExareme =  algorithms.contains("WP_")
+                || algorithms.contains("K_MEANS");
+
+        return isExareme;
+    }
 }