diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index c42fb6eb88381396d1e640a872e757d3048010d8..727f26ddb35b5a1c9890b5b4ac12a00e40980657 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -29,8 +29,10 @@ import scala.Tuple2;
 public class Experiment {
 
     public static final String WP_K_MEANS = "K_MEANS";
-
     public static final String WP_LINEAR_REGRESSION = "WP_LINEAR_REGRESSION";
+    public static final String WP_VARIABLES_HISTOGRAM = "WP_VARIABLES_HISTOGRAM";
+    public static final String WP_REGRESSION_TREE = "PIPELINE_ISOUP_REGRESSION_TREE_SERIALIZER";
+    public static final String WP_MODEL_TREE = "PIPELINE_ISOUP_MODEL_TREE_SERIALIZER";
 
     private static final Logger LOGGER = LoggerFactory.getLogger(Experiment.class);
 
@@ -134,12 +136,27 @@ public class Experiment {
                 validationsSeq, Option.empty());
     }
 
+    private String chainsParams(List<String> params, String operator) {
+        StringBuilder sb = new StringBuilder();
+        int i = 0;
+        for (String s : params)
+        {
+            i++;
+            sb.append(s);
+            if (i < params.size()) {
+                sb.append(operator);
+            }
+        }
+        return sb.toString();
+    }
 
     public String computeExaremeQuery(List<AlgorithmParam> params) {
         List<ExaremeQueryElement> queryElements = new LinkedList<>();
 
         // parameters
-        String design = "";
+        String design = ""; // TODO: don't assign to a global
+        String nobuckets = "";
+
         if (params != null) {
             for (AlgorithmParam p : params)
             {
@@ -152,6 +169,10 @@ public class Experiment {
                 if (p.getCode().equals("design")) {
                     design = p.getValue();
                 }
+
+                if (p.getCode().equals("nobuckets")) {
+                    nobuckets = p.getValue();
+                }
             }
         }
 
@@ -167,56 +188,69 @@ public class Experiment {
         String algoName = this.isExaremeAlgorithm()._2;
         if (algoName.equals(WP_K_MEANS)) {
             // columns
-            List<String> columns = new ArrayList<>();
-            columns.addAll(variables);
+            List<String> columns = new ArrayList<>(variables);
             columns.addAll(covariables);
             columns.addAll(groupings);
-            StringBuilder sb = new StringBuilder();
-            int i = 0;
-            for (String s : columns)
-            {
-                i++;
-                sb.append(s);
-                if (i < columns.size()) {
-                    sb.append(",");
-                }
-            }
+
             ExaremeQueryElement columnsEl = new ExaremeQueryElement();
             columnsEl.setName("columns");
             columnsEl.setDesc("");
-            columnsEl.setValue(sb.toString());
+            columnsEl.setValue(chainsParams(columns, ";"));
             queryElements.add(columnsEl);
         } else if (algoName.equals(WP_LINEAR_REGRESSION)) {
-            List<String> vars = new ArrayList<>();
-            vars.addAll(variables);
-            vars.addAll(covariables);
+            List<String> nominals = new ArrayList<>(covariables);
+            nominals.addAll(groupings);
 
             String operator = design.equals("factorial") ? "*" : "+";
-            StringBuilder sb = new StringBuilder();
-            int i = 0;
-            for (String s : vars)
-            {
-                i++;
-                sb.append(s);
-                if (i < vars.size()) {
-                    sb.append(operator);
-                }
-            }
+
             ExaremeQueryElement xEl = new ExaremeQueryElement();
             xEl.setName("x");
             xEl.setDesc("");
-            xEl.setValue(sb.toString());
+            xEl.setValue(chainsParams(nominals, operator));
             queryElements.add(xEl);
 
-            StringBuilder sby = new StringBuilder();
-            for (String s : variables)
-            {
-                sby.append(s);
-            }
             ExaremeQueryElement yEl = new ExaremeQueryElement();
             yEl.setName("y");
             yEl.setDesc("");
-            yEl.setValue(sby.toString());
+            yEl.setValue(chainsParams(variables, ";"));
+            queryElements.add(yEl);
+        } else if (algoName.equals(WP_VARIABLES_HISTOGRAM)) {
+            List<String> column1 = new ArrayList<>(variables);
+            ExaremeQueryElement columnsEl = new ExaremeQueryElement();
+            columnsEl.setName("column1");
+            columnsEl.setDesc("");
+            columnsEl.setValue(chainsParams(column1, ","));
+            queryElements.add(columnsEl);
+
+            List<String> column2 = new ArrayList<>(covariables);
+            ExaremeQueryElement columnsEl2 = new ExaremeQueryElement();
+            columnsEl2.setName("column2");
+            columnsEl2.setDesc("");
+            columnsEl2.setValue(chainsParams(column2, ","));
+            queryElements.add(columnsEl2);
+
+            if (!nobuckets.isEmpty()) {
+                ExaremeQueryElement columnsEl3 = new ExaremeQueryElement();
+                columnsEl3.setName("nobuckets");
+                columnsEl3.setDesc("");
+                columnsEl3.setValue(nobuckets);
+                queryElements.add(columnsEl3);
+            }
+        } else if (algoName.equals(WP_REGRESSION_TREE) || algoName.equals(WP_MODEL_TREE)) {
+            List<String> target = new ArrayList<>(variables);
+            List<String> descriptive = new ArrayList<>(covariables);
+            descriptive.addAll(groupings);
+
+            ExaremeQueryElement xEl = new ExaremeQueryElement();
+            xEl.setName("target_attributes");
+            xEl.setDesc("");
+            xEl.setValue(chainsParams(target, ","));
+            queryElements.add(xEl);
+
+            ExaremeQueryElement yEl = new ExaremeQueryElement();
+            yEl.setName("descriptive_attributes");
+            yEl.setDesc("");
+            yEl.setValue(chainsParams(descriptive, ","));
             queryElements.add(yEl);
         }
 
@@ -280,12 +314,15 @@ public class Experiment {
                 jsonObjectResult.add("code", algoObject.get("code"));
 
                 // add mime-type
-                if (jsonData.get("Error") != null){
+                String algo = isExaremeAlgorithm._2;
+                if (jsonData.get("Error") != null) {
                     jsonObjectResult.add("type", new JsonPrimitive("text/plain+error"));
-                } else if (isExaremeAlgorithm._2 == WP_K_MEANS){
+                } else if (algo.equals( WP_K_MEANS) || algo.equals( WP_VARIABLES_HISTOGRAM)) {
                     jsonObjectResult.add("type", new JsonPrimitive("application/vnd.highcharts+json"));
-                } else if (isExaremeAlgorithm._2 == WP_LINEAR_REGRESSION){
+                } else if (algo.equals(WP_LINEAR_REGRESSION)) {
                     jsonObjectResult.add("type", new JsonPrimitive("application/vnd.dataresource+json"));
+                } else if (algo.equals(WP_REGRESSION_TREE) || algo.equals(WP_MODEL_TREE)) {
+                    jsonObjectResult.add("type", new JsonPrimitive("application/vnd.visjs+javascript"));
                 }
 
                 jsonArrayResult.add(jsonObjectResult);
@@ -406,12 +443,22 @@ public class Experiment {
         String algorithm = "";
 
         String algorithms = this.algorithms;
+
         if (algorithms.contains(WP_K_MEANS)) {
             isExareme = true;
             algorithm = WP_K_MEANS;
         } else if (algorithms.contains(WP_LINEAR_REGRESSION)) {
             isExareme = true;
             algorithm = WP_LINEAR_REGRESSION;
+        } else if (algorithms.contains(WP_VARIABLES_HISTOGRAM)) {
+            isExareme = true;
+            algorithm = WP_VARIABLES_HISTOGRAM;
+        } else if (algorithms.contains(WP_REGRESSION_TREE)) {
+            isExareme = true;
+            algorithm = WP_REGRESSION_TREE;
+        } else if (algorithms.contains(WP_MODEL_TREE)) {
+            isExareme = true;
+            algorithm = WP_MODEL_TREE;
         }
 
         return new Tuple2(isExareme, algorithm);
diff --git a/src/main/resources/data/exareme_algorithms.json b/src/main/resources/data/exareme_algorithms.json
index 4f05bb102fe2c5305ddd820f0cf9a10e4b3ef20d..f1601397d77487b7623c9e2661d188feb3c8a6cc 100644
--- a/src/main/resources/data/exareme_algorithms.json
+++ b/src/main/resources/data/exareme_algorithms.json
@@ -1,7 +1,66 @@
 [
+  {
+    "code": "WP_VARIABLES_HISTOGRAM",
+    "label": " Histogram",
+    "type": ["statistics"],
+    "environment": "Exareme",
+    "description": "Histograms",
+    "parameters": [{
+      "code": "nobuckets",
+      "label": "nobuckets",
+      "default_value": 4,
+      "type": "int",
+      "constraints": {
+        "min": 1,
+        "max": null
+      },
+      "description":
+      "The number of clusters. Typical values range from 2 to 10."
+    }],
+    "constraints": {
+      "variable": {
+        "binominal": true,
+        "integer": true,
+        "polynominal": true,
+        "real": true
+      }
+    }
+  },
+  {
+    "code": "PIPELINE_ISOUP_REGRESSION_TREE_SERIALIZER",
+    "label": " Regression Tree",
+    "type": ["statistics"],
+    "environment": "Exareme",
+    "description": "Regression Tree Serializer",
+    "parameters": [],
+    "constraints": {
+      "variable": {
+        "binominal": true,
+        "integer": true,
+        "polynominal": true,
+        "real": true
+      }
+    }
+  },
+  {
+    "code": "PIPELINE_ISOUP_MODEL_TREE_SERIALIZER",
+    "label": "Model Tree",
+    "type": ["statistics"],
+    "environment": "Exareme",
+    "description": "Model Tree Serializer",
+    "parameters": [],
+    "constraints": {
+      "variable": {
+        "binominal": true,
+        "integer": true,
+        "polynominal": true,
+        "real": true
+      }
+    }
+  },
   {
     "code": "WP_LINEAR_REGRESSION",
-    "label": "Linear regression (Exareme)",
+    "label": "Linear regression",
     "type": ["statistics"],
     "environment": "Exareme",
     "description": "Linear Regression using Exareme services",
@@ -9,13 +68,11 @@
       {
         "code": "design",
         "default_value": "factorial",
-        "description": "The type of multi-factors design. Choose 'factorial' to enable interactions analysis or 'additive' for a model without no interaction at all.",
+        "description":
+        "The type of multi-factors design. Choose 'factorial' to enable interactions analysis or 'additive' for a model without no interaction at all.",
         "label": "design",
         "type": "enumeration",
-        "values": [
-          "factorial",
-          "additive"
-        ]
+        "values": ["factorial", "additive"]
       }
     ],
     "constraints": {
@@ -29,7 +86,7 @@
   },
   {
     "code": "K_MEANS",
-    "label": "K_MEANS (Exareme)",
+    "label": "K_MEANS",
     "type": ["statistics"],
     "environment": "Exareme",
     "description": "k-Means using Exareme services",