diff --git a/docker/config/application.tmpl b/docker/config/application.tmpl
index 0856eacbe4e8bbb2f9137d8df71c30c64f7bc342..5f9ea27f9885a3c518cb6fed0b418276012470ea 100644
--- a/docker/config/application.tmpl
+++ b/docker/config/application.tmpl
@@ -89,3 +89,4 @@ endpoints:
 services:
   exareme:
     miningExaremeUrl: {{ default .Env.EXAREME_URL "http://localhost:9090" }}/mining/query
+    algorithmsUrl: {{ default .Env.EXAREME_URL "http://localhost:9090" }}/mining/algorithms.json
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 324ed29fd331b76639d29f5bf5275dd1b464a7eb..3eaee9e5450619fc03fc151aab8268cf662dc9f0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -293,6 +293,11 @@
             <version>${scala.release.version}</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
index caa8ea97be33dbb6773754c6ce37c6f2a609094e..fba15a4f834083e101ecbcb5b28fe77f2e199c8b 100644
--- a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
@@ -25,18 +25,14 @@ import scala.concurrent.ExecutionContext;
 import scala.concurrent.Future;
 
 import java.io.IOException;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.UUID;
-
+import java.util.*;
 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 
 /**
  * Created by habfast on 21/04/16.
  */
 @RestController
-@RequestMapping(value = "/experiments", produces = {APPLICATION_JSON_VALUE})
+@RequestMapping(value = "/experiments", produces = { APPLICATION_JSON_VALUE })
 @Api(value = "/experiments", description = "the experiments API")
 public class ExperimentApi extends WokenClientController {
 
@@ -44,11 +40,8 @@ public class ExperimentApi extends WokenClientController {
 
     private static final Gson gson = new Gson();
 
-    private static final Gson gsonOnlyExposed = new GsonBuilder()
-            .serializeNulls()
-            .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
-            .excludeFieldsWithoutExposeAnnotation()
-            .create();
+    private static final Gson gsonOnlyExposed = new GsonBuilder().serializeNulls()
+            .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").excludeFieldsWithoutExposeAnnotation().create();
 
     @Value("#{'${services.exareme.miningExaremeUrl:http://localhost:9090/mining/query}'}")
     public String miningExaremeQueryUrl;
@@ -67,33 +60,30 @@ public class ExperimentApi extends WokenClientController {
     public ResponseEntity<String> runExperiment(@RequestBody ExperimentQuery expQuery) {
         LOGGER.info("Run an experiment");
 
-        Experiment experiment = new Experiment();
-        experiment.setUuid(UUID.randomUUID());
-        User user = userInfo.getUser();
+        Experiment experiment = saveExperiment(expQuery);
+        sendExperiment(experiment);
 
-        experiment.setAlgorithms(gson.toJson(expQuery.getAlgorithms()));
-        experiment.setValidations(gson.toJson(expQuery.getValidations()));
-        experiment.setName(expQuery.getName());
-        experiment.setCreatedBy(user);
-        experiment.setModel(modelRepository.findOne(expQuery.getModel()));
-        experimentRepository.save(experiment);
+        return new ResponseEntity<>(gsonOnlyExposed.toJson(experiment.jsonify()), HttpStatus.OK);
+    }
 
-        LOGGER.info("Experiment saved");
+    @ApiOperation(value = "Create an experiment on Exareme", response = Experiment.class)
+    @RequestMapping(value = "/exareme", method = RequestMethod.POST)
+    public ResponseEntity<String> runExaremeExperiment(@RequestBody ExperimentQuery expQuery) {
+        LOGGER.info("sendExaremeExperiment");
 
-        if (!experiment.isExaremeAlgorithm()._1) {
-            sendExperiment(experiment);
-        } else {
-            String algoCode = expQuery.getAlgorithms().get(0).getCode();
-            List<AlgorithmParam> params =  expQuery.getAlgorithms().get(0).getParameters();
-            sendExaremeExperiment(experiment, algoCode, params);
-        }
+        Experiment experiment = saveExperiment(expQuery);
+
+        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);
     }
 
     @ApiOperation(value = "get an experiment", response = Experiment.class)
     @RequestMapping(value = "/{uuid}", method = RequestMethod.GET)
-    public ResponseEntity<String> getExperiment(@ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
+    public ResponseEntity<String> getExperiment(
+            @ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
         LOGGER.info("Get an experiment");
 
         Experiment experiment;
@@ -117,7 +107,8 @@ public class ExperimentApi extends WokenClientController {
 
     @ApiOperation(value = "Mark an experiment as viewed", response = Experiment.class)
     @RequestMapping(value = "/{uuid}/markAsViewed", method = RequestMethod.GET)
-    public ResponseEntity<String> markExperimentAsViewed(@ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
+    public ResponseEntity<String> markExperimentAsViewed(
+            @ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
         LOGGER.info("Mark an experiment as viewed");
 
         Experiment experiment;
@@ -144,7 +135,8 @@ public class ExperimentApi extends WokenClientController {
 
     @ApiOperation(value = "Mark an experiment as shared", response = Experiment.class)
     @RequestMapping(value = "/{uuid}/markAsShared", method = RequestMethod.GET)
-    public ResponseEntity<String> markExperimentAsShared(@ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
+    public ResponseEntity<String> markExperimentAsShared(
+            @ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
         LOGGER.info("Mark an experiment as shared");
 
         return doMarkExperimentAsShared(uuid, true);
@@ -152,72 +144,62 @@ public class ExperimentApi extends WokenClientController {
 
     @ApiOperation(value = "Mark an experiment as unshared", response = Experiment.class)
     @RequestMapping(value = "/{uuid}/markAsUnshared", method = RequestMethod.GET)
-    public ResponseEntity<String> markExperimentAsUnshared(@ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
+    public ResponseEntity<String> markExperimentAsUnshared(
+            @ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
         LOGGER.info("Mark an experiment as unshared");
 
         return doMarkExperimentAsShared(uuid, false);
     }
 
     @ApiOperation(value = "list experiments", response = Experiment.class, responseContainer = "List")
-    @RequestMapping(method = RequestMethod.GET, params = {"maxResultCount"})
+    @RequestMapping(method = RequestMethod.GET, params = { "maxResultCount" })
     public ResponseEntity<String> listExperiments(
-            @ApiParam(value = "maxResultCount") @RequestParam int maxResultCount
-    ) {
+            @ApiParam(value = "maxResultCount") @RequestParam int maxResultCount) {
         LOGGER.info("List experiments");
 
         return doListExperiments(false, null);
     }
 
     @ApiOperation(value = "list experiments", response = Experiment.class, responseContainer = "List")
-    @RequestMapping(method = RequestMethod.GET, params = {"slug", "maxResultCount"})
-    public ResponseEntity<String> listExperiments(
-            @ApiParam(value = "slug") @RequestParam("slug") String modelSlug,
-            @ApiParam(value = "maxResultCount") @RequestParam("maxResultCount") int maxResultCount
-    ) {
+    @RequestMapping(method = RequestMethod.GET, params = { "slug", "maxResultCount" })
+    public ResponseEntity<String> listExperiments(@ApiParam(value = "slug") @RequestParam("slug") String modelSlug,
+            @ApiParam(value = "maxResultCount") @RequestParam("maxResultCount") int maxResultCount) {
         LOGGER.info("List experiments");
 
         if (maxResultCount <= 0 && (modelSlug == null || "".equals(modelSlug))) {
-            return new ResponseEntity<>("You must provide at least a slug or a limit of result", HttpStatus.BAD_REQUEST);
+            return new ResponseEntity<>("You must provide at least a slug or a limit of result",
+                    HttpStatus.BAD_REQUEST);
         }
 
         return doListExperiments(false, modelSlug);
     }
 
     @ApiOperation(value = "list my experiments", response = Experiment.class, responseContainer = "List")
-    @RequestMapping(method = RequestMethod.GET, params = {"mine"})
-    public ResponseEntity<String> listMyExperiments(
-            @ApiParam(value = "mine") @RequestParam("mine") boolean mine
-    ) {
+    @RequestMapping(method = RequestMethod.GET, params = { "mine" })
+    public ResponseEntity<String> listMyExperiments(@ApiParam(value = "mine") @RequestParam("mine") boolean mine) {
         LOGGER.info("List my experiments");
 
         return doListExperiments(true, null);
     }
 
-
-    private ResponseEntity<String> doListExperiments(
-            boolean mine,
-            String modelSlug
-    ) {
+    private ResponseEntity<String> doListExperiments(boolean mine, String modelSlug) {
         User user = userInfo.getUser();
 
         Iterable<Experiment> myExperiments = experimentRepository.findByCreatedBy(user);
         List<Experiment> expList = Lists.newLinkedList(myExperiments);
-        if(!mine)
-        {
+        if (!mine) {
             Iterable<Experiment> sharedExperiments = experimentRepository.findByShared(true);
             List<Experiment> sharedExpList = Lists.newLinkedList(sharedExperiments);
             expList.addAll(sharedExpList);
         }
 
         if (modelSlug != null && !"".equals(modelSlug)) {
-            for(Iterator<Experiment> it = expList.iterator(); it.hasNext();)
-            {
+            for (Iterator<Experiment> it = expList.iterator(); it.hasNext();) {
                 Experiment e = it.next();
                 e.setResult(null);
                 e.setAlgorithms(null);
                 e.setValidations(null);
-                if(!e.getModel().getSlug().equals(modelSlug))
-                {
+                if (!e.getModel().getSlug().equals(modelSlug)) {
                     it.remove();
                 }
             }
@@ -255,10 +237,11 @@ public class ExperimentApi extends WokenClientController {
         User user = userInfo.getUser();
 
         // this runs in the background. For future optimization: use a thread pool
-        final ch.chuv.lren.woken.messages.query.ExperimentQuery experimentQuery = experiment.prepareQuery(user.getUsername());
+        final ch.chuv.lren.woken.messages.query.ExperimentQuery experimentQuery = experiment
+                .prepareQuery(user.getUsername());
         final ExecutionContext ec = getExecutor();
 
-        Future<Object> response = sendWokenQuery(experimentQuery, 24*3600);
+        Future<Object> response = sendWokenQuery(experimentQuery, 24 * 3600);
         response.onSuccess(new OnSuccess<Object>() {
             public void onSuccess(Object result) {
                 QueryResult queryResult = (QueryResult) result;
@@ -282,11 +265,18 @@ public class ExperimentApi extends WokenClientController {
         }, ec);
     }
 
-    private void sendExaremeExperiment(Experiment experiment, String algoCode, List <AlgorithmParam> params) {
-        // >> Temporary: we should integrate exareme in a proper way in the future
+    private void sendExaremeExperiment(Experiment experiment, String algoCode, List<AlgorithmParam> params) {
         // this runs in the background. For future optimization: use a thread pool
         new Thread(() -> {
-            String query = experiment.computeExaremeQuery(params);
+            List<HashMap<String, String>> queryList = new ArrayList<HashMap<String, String>>();
+
+            if (params != null) {
+                for (AlgorithmParam p : params) {
+                    queryList.add(makeObject(p.getName(), p.getValue()));
+                }
+            }
+
+            String query = gson.toJson(queryList);
             String url = miningExaremeQueryUrl + "/" + algoCode;
 
             // Results are stored in the experiment object
@@ -305,14 +295,40 @@ public class ExperimentApi extends WokenClientController {
             }
             finishExperiment(experiment);
         }).start();
-        // << Temporary
     }
 
-    private void finishExperiment(Experiment experiment)
-    {
+    private void finishExperiment(Experiment experiment) {
         experiment.setFinished(new Date());
         experimentRepository.save(experiment);
 
         LOGGER.info("Experiment updated (finished)");
     }
+
+    private HashMap<String, String> makeObject(String name, String value) {
+        HashMap<String, String> o =  new HashMap<String, String>();
+        o.put("name", name);
+        o.put("value", value);
+
+        return o;
+    }
+
+    private Experiment saveExperiment(ExperimentQuery expQuery) {
+        LOGGER.info("sendExaremeExperiment");
+
+        Experiment experiment = new Experiment();
+        experiment.setUuid(UUID.randomUUID());
+        User user = userInfo.getUser();
+
+        experiment.setAlgorithms(gson.toJson(expQuery.getAlgorithms()));
+        experiment.setValidations(gson.toJson(expQuery.getValidations()));
+        experiment.setName(expQuery.getName());
+        experiment.setCreatedBy(user);
+        experiment.setModel(modelRepository.findOne(expQuery.getModel()));
+        experimentRepository.save(experiment);
+
+        LOGGER.info("Experiment saved");
+
+        return experiment;
+    }
+
 }
diff --git a/src/main/java/eu/hbp/mip/controllers/JWTApi.java b/src/main/java/eu/hbp/mip/controllers/JWTApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..4073a58e288d546172dd2165598662c93af8ff4b
--- /dev/null
+++ b/src/main/java/eu/hbp/mip/controllers/JWTApi.java
@@ -0,0 +1,59 @@
+package eu.hbp.mip.controllers;
+
+import static org.springframework.http.MediaType.TEXT_PLAIN_VALUE;
+import java.security.Key;
+import java.util.Date;
+import javax.crypto.spec.SecretKeySpec;
+import javax.xml.bind.DatatypeConverter;
+import eu.hbp.mip.model.UserInfo;
+import org.slf4j.Logger;
+import eu.hbp.mip.model.User;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.ResponseEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import io.jsonwebtoken.*;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@RestController
+@RequestMapping(value = "/jwt", produces = { TEXT_PLAIN_VALUE })
+@Api(value = "/jwt", description = "the jwt API")
+public class JWTApi {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(JWTApi.class);
+
+    @Autowired
+    private UserInfo userInfo;
+
+    @ApiOperation(value = "Create a JSON Web Token", response = String.class)
+    @RequestMapping(method = RequestMethod.POST)
+    public ResponseEntity<String> createJWT() {
+
+        LOGGER.info("Create a JSON Web Token");
+
+        // SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
+        // String apiKey = "6v2oxpJMzU14U-dqVireln5AUKTtx5fBPSEgaBZiI983d98cfa6";
+        // byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(apiKey);
+        // Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
+
+        long nowMillis = System.currentTimeMillis();
+        Date now = new Date(nowMillis);
+
+        User user = userInfo.getUser();
+
+        // Set the JWT Claims
+        JwtBuilder builder = Jwts.builder().setIssuedAt(now).setIssuer("mip.humanbrainproject.eu")
+                .setSubject(user.getEmail()).signWith(SignatureAlgorithm.HS512,
+                        "hbpSecret");
+
+        String token = builder.compact();
+        LOGGER.info(token);
+        // long expMillis = nowMillis + 86400 * 24;
+        // Date exp = new Date(expMillis);
+        // builder.setExpiration(exp);
+
+        return ResponseEntity.status(HttpStatus.CREATED).body(token);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/eu/hbp/mip/controllers/MethodsApi.java b/src/main/java/eu/hbp/mip/controllers/MethodsApi.java
index b275f889d2f955a8b52cdf25dde3696789a0274c..21d3b9f2f852828df49dd81c4ec85fcecbe8e80c 100644
--- a/src/main/java/eu/hbp/mip/controllers/MethodsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/MethodsApi.java
@@ -12,14 +12,14 @@ import org.springframework.cache.annotation.Cacheable;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import eu.hbp.mip.utils.HTTPUtil;
+import org.springframework.beans.factory.annotation.Value;
+import java.io.IOException;
 
 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 
 @RestController
-@RequestMapping(value = "/methods", produces = {APPLICATION_JSON_VALUE})
+@RequestMapping(value = "/methods", produces = { APPLICATION_JSON_VALUE })
 @Api(value = "/methods", description = "the methods API")
 public class MethodsApi extends WokenClientController {
 
@@ -27,7 +27,8 @@ public class MethodsApi extends WokenClientController {
 
     private static final Gson gson = new Gson();
 
-    private static final String EXAREME_ALGO_JSON_FILE="data/exareme_algorithms.json";
+    @Value("#{'${services.exareme.algorithmsUrl:http://localhost:9090/mining/algorithms.json}'}")
+    private String exaremeAlgorithmsUrl;
 
     @ApiOperation(value = "List available methods and validations", response = String.class)
     @Cacheable(value = "methods", unless = "#result.getStatusCode().value()!=200")
@@ -37,19 +38,28 @@ public class MethodsApi extends WokenClientController {
 
         return requestWoken(MethodsQuery$.MODULE$, 10, r -> {
             MethodsResponse result = (MethodsResponse) r;
-
-            // >> Temporary : should return result.methods() in the future
             JsonObject catalog = new JsonParser().parse(result.methods().compactPrint()).getAsJsonObject();
-            InputStream is = MethodsApi.class.getClassLoader().getResourceAsStream(EXAREME_ALGO_JSON_FILE);
-            InputStreamReader isr = new InputStreamReader(is);
-            BufferedReader br = new BufferedReader(isr);
-            JsonElement element = new JsonParser().parse(br);
-            JsonArray exaremeAlgo = element.getAsJsonArray();
-            catalog.get("algorithms").getAsJsonArray().addAll(exaremeAlgo);
-            // << Temporary
 
             return ResponseEntity.ok(gson.toJson(catalog));
         });
     }
 
+    @ApiOperation(value = "List Exareme algorithms and validations", response = String.class)
+    @Cacheable(value = "exareme", unless = "#result.getStatusCode().value()!=200")
+    @RequestMapping(value = "/exareme", method = RequestMethod.GET)
+    public ResponseEntity<Object> getExaremeAlgorithms() {
+        LOGGER.info("List Exareme algorithms and validations");
+
+        try {
+            StringBuilder response = new StringBuilder();
+            HTTPUtil.sendGet(exaremeAlgorithmsUrl, response);
+            JsonElement element = new JsonParser().parse(response.toString());
+
+            return ResponseEntity.ok(gson.toJson(element));
+        } catch (IOException e) {
+            return ResponseEntity.status(500).body(e.getMessage());
+        }
+
+    }
+
 }
diff --git a/src/main/java/eu/hbp/mip/controllers/MiningApi.java b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
index bf89261eb14fab25a0adf5bf7dd3e07ff43235e6..24356234ea7467c873b902830f37fa46b78a5c17 100644
--- a/src/main/java/eu/hbp/mip/controllers/MiningApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
@@ -38,9 +38,6 @@ public class MiningApi extends WokenClientController {
     @Autowired
     private UserInfo userInfo;
 
-    @Value("#{'${services.query.miningExaremeUrl:http://localhost:9090/mining/query}'}")
-    public String queryUrl;
-
     @ApiOperation(value = "Run an algorithm", response = String.class)
     @Cacheable(value = "mining",
             condition = "#query != null and (#query.getAlgorithm().getCode() == 'histograms' or #query.getAlgorithm().getCode() == 'histograms')",
diff --git a/src/main/java/eu/hbp/mip/model/AlgorithmParam.java b/src/main/java/eu/hbp/mip/model/AlgorithmParam.java
index e4e5eac8ddcb77ea6e5c4af7837af547c2ba6efd..62c48ba13b4cffcf647d4da97a0509735f18cac4 100644
--- a/src/main/java/eu/hbp/mip/model/AlgorithmParam.java
+++ b/src/main/java/eu/hbp/mip/model/AlgorithmParam.java
@@ -11,6 +11,15 @@ public class AlgorithmParam {
 
     public String getCode() {
         return code;
+
+    }
+
+    public void setName(String name) {
+        this.code = name;
+    }
+
+    public String getName() {
+        return this.code;
     }
 
     public void setCode(String code) {
diff --git a/src/main/java/eu/hbp/mip/model/ExaremeQueryElement.java b/src/main/java/eu/hbp/mip/model/ExaremeQueryElement.java
deleted file mode 100644
index 0b7005c19dd985d4ae639768053df2c61f836ac7..0000000000000000000000000000000000000000
--- a/src/main/java/eu/hbp/mip/model/ExaremeQueryElement.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package eu.hbp.mip.model;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import io.swagger.annotations.ApiModel;
-
-/**
- * Created by mirco on 20.06.16.
- */
-
-@ApiModel
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class ExaremeQueryElement {
-
-    private String name;
-
-    private String desc;
-
-    private String value;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDesc() {
-        return desc;
-    }
-
-    public void setDesc(String desc) {
-        this.desc = desc;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-}
diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index 8f4dd0a347a7e595742de1a0b9702163d4a0819b..e2def32c37b446fde76ca609792569036b8b22e6 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -19,7 +19,6 @@ import scala.collection.JavaConversions;
 import javax.persistence.*;
 import java.lang.reflect.Type;
 import java.util.*;
-import scala.Tuple2;
 
 /**
  * Created by habfast on 21/04/16.
@@ -28,12 +27,6 @@ import scala.Tuple2;
 @Table(name = "`experiment`")
 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);
 
     private static final Gson gson = new Gson();
@@ -137,159 +130,9 @@ 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 = ""; // TODO: don't assign to a global
-        String nobuckets = "";
-
-        if (params != null) {
-            for (AlgorithmParam p : params)
-            {
-                ExaremeQueryElement paramEl = new ExaremeQueryElement();
-                paramEl.setName(p.getCode());
-                paramEl.setDesc("");
-                paramEl.setValue(p.getValue());
-                queryElements.add(paramEl);
-
-                if (p.getCode().equals("design")) {
-                    design = p.getValue();
-                }
-
-                if (p.getCode().equals("nobuckets")) {
-                    nobuckets = p.getValue();
-                }
-            }
-        }
-
-        List<String> variables = new ArrayList<>();
-        List<String> covariables = new ArrayList<>();
-        List<String> groupings = new ArrayList<>();
-
-        for (Variable var : model.getQuery().getVariables()) { variables.add(var.getCode()); }
-        for (Variable var : model.getQuery().getCovariables()) { covariables.add(var.getCode()); }
-        for (Variable var : model.getQuery().getGrouping()) { groupings.add(var.getCode()); }
-
-        // Set algorithm specific queries
-        String algoName = this.isExaremeAlgorithm()._2;
-        if (algoName.equals(WP_K_MEANS)) {
-            // columns
-            List<String> columns = variables;
-            columns.addAll(covariables);
-            columns.addAll(groupings);
-
-            ExaremeQueryElement columnsEl = new ExaremeQueryElement();
-            columnsEl.setName("columns");
-            columnsEl.setDesc("");
-            columnsEl.setValue(chainsParams(columns, ","));
-            queryElements.add(columnsEl);
-        } else if (algoName.equals(WP_LINEAR_REGRESSION)) {
-            List<String> nominals = covariables.isEmpty() ? groupings : covariables;
-            nominals.addAll(groupings);
-
-            String operator = design.equals("factorial") ? "*" : "+";
-
-            ExaremeQueryElement xEl = new ExaremeQueryElement();
-            xEl.setName("x");
-            xEl.setDesc("");
-            xEl.setValue(chainsParams(nominals, operator));
-            queryElements.add(xEl);
-
-            ExaremeQueryElement yEl = new ExaremeQueryElement();
-            yEl.setName("y");
-            yEl.setDesc("");
-            yEl.setValue(chainsParams(variables, ","));
-            queryElements.add(yEl);
-        } else if (algoName.equals(WP_VARIABLES_HISTOGRAM)) {
-            List<String> column1 = variables;
-            ExaremeQueryElement columnsEl = new ExaremeQueryElement();
-            columnsEl.setName("column1");
-            columnsEl.setDesc("");
-            columnsEl.setValue(chainsParams(column1, ","));
-            queryElements.add(columnsEl);
-
-            List<String> column2 = covariables.isEmpty() ? groupings : 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 = variables;
-            List<String> descriptive = covariables.isEmpty() ? groupings : 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);
-        }
-
-        // datasets
-        StringBuilder datasets = new StringBuilder();
-        List<Variable> trainingDatasets = model.getQuery().getTrainingDatasets();
-        int j = 0;
-        for (Variable var : trainingDatasets)
-        {
-            j++;
-            datasets.append(var.getCode());
-            if (j < trainingDatasets.size() ) {
-                datasets.append(",");
-            }
-        }
-
-        ExaremeQueryElement datasetsEl = new ExaremeQueryElement();
-        datasetsEl.setName("dataset");
-        datasetsEl.setDesc("");
-        // datasetsEl.setValue("adni,ppmi,edsd,fbf,clm");
-        datasetsEl.setValue(datasets.toString());
-        queryElements.add(datasetsEl);
-
-        // filter
-        String filter = model.getQuery().getFilters();
-        ExaremeQueryElement filterEl = new ExaremeQueryElement();
-        filterEl.setName("filter");
-        filterEl.setDesc("");
-        filterEl.setValue(filter);
-        queryElements.add(filterEl);
-
-        return gson.toJson(queryElements);
-    }
-
     public JsonObject jsonify() {
         JsonObject exp = gson.toJsonTree(this).getAsJsonObject();
         JsonParser parser = new JsonParser();
-        Tuple2<Boolean, String> isExaremeAlgorithm = this.isExaremeAlgorithm();
 
         if (this.algorithms != null)
         {
@@ -308,45 +151,9 @@ public class Experiment {
         if (this.result != null && !this.hasServerError) {
             exp.remove("result");
 
-            if (!isExaremeAlgorithm._1) {
-                JsonElement jsonResult = parser.parse(this.result);
-                exp.add("result", jsonResult);
-            } else {
-                JsonArray jsonArrayResult = new JsonArray();
-                JsonObject jsonObjectResult = new JsonObject();
-
-                JsonObject algoObject = parser.parse(this.algorithms).getAsJsonArray().get(0).getAsJsonObject();
-                jsonObjectResult.add("algorithm", algoObject.get("name"));
-                jsonObjectResult.add("code", algoObject.get("code"));
-
-                exp.remove("result");
-                JsonObject tryJson;
-                try {
-                    tryJson = parser.parse(this.result).getAsJsonArray().get(0).getAsJsonObject();
-                } catch(JsonParseException e) {
-                    tryJson = new JsonObject();
-                    tryJson.add("result", new JsonPrimitive(this.result));
-                }
-
-                JsonObject jsonData = tryJson;
-                jsonObjectResult.add("data", jsonData);
-
-                // add mime-type
-                String algo = isExaremeAlgorithm._2;
-                if (jsonData.get("Error") != null) {
-                    jsonObjectResult.add("type", new JsonPrimitive("text/plain+error"));
-                } else if (algo.equals( WP_K_MEANS) || algo.equals( WP_VARIABLES_HISTOGRAM)) {
-                    jsonObjectResult.add("type", new JsonPrimitive("application/vnd.highcharts+json"));
-                } 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);
-
-                exp.add("result", jsonArrayResult);
-            }
+            JsonElement jsonResult = parser.parse(this.result);
+            exp.add("result", jsonResult);
+
         }
 
         return exp;
@@ -455,30 +262,4 @@ public class Experiment {
     public void setShared(boolean shared) {
         this.shared = shared;
     }
-
-    public Tuple2<Boolean, String> isExaremeAlgorithm() {
-        Boolean isExareme = false;
-        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<Boolean, String>(isExareme, algorithm);
-    }
 }
diff --git a/src/main/java/eu/hbp/mip/model/UserInfo.java b/src/main/java/eu/hbp/mip/model/UserInfo.java
index f4671b634d152244ed79976ffe2a170b9130492e..293ce9534cf78c0f27b5f742ca924540072e2fea 100644
--- a/src/main/java/eu/hbp/mip/model/UserInfo.java
+++ b/src/main/java/eu/hbp/mip/model/UserInfo.java
@@ -52,6 +52,7 @@ public class UserInfo {
                 user = new User();
                 user.setUsername("anonymous");
                 user.setFullname("anonymous");
+                user.setEmail("anonymous@anonymous.com");
                 user.setPicture("images/users/default_user.png");
             } else {
                 user = new User(getUserInfos());
diff --git a/src/main/java/eu/hbp/mip/model/Variable.java b/src/main/java/eu/hbp/mip/model/Variable.java
index 0947cdd7db753d27741a2e0b32fb4239c166cbac..1fcce2e48e89dc8e94a935bfc803ada086cd53f5 100644
--- a/src/main/java/eu/hbp/mip/model/Variable.java
+++ b/src/main/java/eu/hbp/mip/model/Variable.java
@@ -12,6 +12,7 @@ import io.swagger.annotations.ApiModel;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.Table;
+import java.util.List;
 
 @Entity
 @Table(name = "`variable`")
@@ -42,6 +43,17 @@ public class Variable {
         this.code = code;
     }
 
-
+    public static String stringFromVariables(List<Variable> variables, String operator) {
+        StringBuilder sb = new StringBuilder();
+        int i = 0;
+        for (Variable s : variables) {
+            i++;
+            sb.append(s.getCode());
+            if (i < variables.size()) {
+                sb.append(operator);
+            }
+        }
+        return sb.toString();
+    }
 
 }
diff --git a/src/main/resources/data/exareme_algorithms.json b/src/main/resources/data/exareme_algorithms.json
deleted file mode 100644
index 3ea4bdf19b7f2a779ecd70ab3385ef9b96c8533d..0000000000000000000000000000000000000000
--- a/src/main/resources/data/exareme_algorithms.json
+++ /dev/null
@@ -1,137 +0,0 @@
-[
-  {
-    "code": "WP_VARIABLES_HISTOGRAM",
-    "constraints": {
-      "variable": {
-        "binominal": true,
-        "integer": true,
-        "polynominal": true,
-        "real": true
-      }
-    },
-    "description": "Histograms",
-    "environment": "Exareme",
-    "label": " Histogram",
-    "parameters": [
-      {
-        "code": "nobuckets",
-        "constraints": {
-          "max": null,
-          "min": 1
-        },
-        "default_value": 4,
-        "description": "The number of clusters. Typical values range from 2 to 10.",
-        "label": "nobuckets",
-        "type": "int"
-      }
-    ],
-    "type": [
-      "statistics"
-    ]
-  },
-  {
-    "code": "PIPELINE_ISOUP_REGRESSION_TREE_SERIALIZER",
-    "constraints": {
-      "variable": {
-        "binominal": true,
-        "integer": true,
-        "polynominal": true,
-        "real": true
-      }
-    },
-    "description": "Regression Tree Serializer",
-    "environment": "Exareme",
-    "label": " Regression Tree",
-    "parameters": [],
-    "type": [
-      "statistics"
-    ]
-  },
-  {
-    "code": "PIPELINE_ISOUP_MODEL_TREE_SERIALIZER",
-    "constraints": {
-      "variable": {
-        "binominal": true,
-        "integer": true,
-        "polynominal": true,
-        "real": true
-      }
-    },
-    "description": "Model Tree Serializer",
-    "environment": "Exareme",
-    "label": "Model Tree",
-    "parameters": [],
-    "type": [
-      "statistics"
-    ]
-  },
-  {
-    "code": "WP_LINEAR_REGRESSION",
-    "constraints": {
-      "variable": {
-        "binominal": false,
-        "integer": true,
-        "polynominal": false,
-        "real": true
-      }
-    },
-    "description": "Linear Regression using Exareme services",
-    "environment": "Exareme",
-    "label": "Linear regression",
-    "parameters": [
-      {
-        "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.",
-        "label": "design",
-        "type": "enumeration",
-        "values": [
-          "factorial",
-          "additive"
-        ]
-      }
-    ],
-    "type": [
-      "statistics"
-    ]
-  },
-  {
-    "code": "K_MEANS",
-    "constraints": {
-      "covariables": {
-        "max_count": null,
-        "min_count": "1"
-      },
-      "groupings": {
-        "max_count": 0,
-        "min_count": 0
-      },
-      "mixed": false,
-      "variable": {
-        "binominal": true,
-        "integer": true,
-        "polynominal": true,
-        "real": true
-      }
-    },
-    "description": "k-Means using Exareme services",
-    "environment": "Exareme",
-    "label": "K_MEANS",
-    "parameters": [
-      {
-        "code": "k",
-        "constraints": {
-          "max": null,
-          "min": 1
-        },
-        "default_value": 5,
-        "description": "The number of clusters. Typical values range from 2 to 10.",
-        "label": "k",
-        "type": "int"
-      }
-    ],
-    "type": [
-      "statistics"
-    ]
-  }
-]