diff --git a/src/main/java/eu/hbp/mip/controllers/AppsApi.java b/src/main/java/eu/hbp/mip/controllers/AppsApi.java
index 8a61f04cda468e524c5d4ec8dc5a4d0e9e7b1afe..f79fb8a70eb3c4ba5e92c8f81cb037a3a211ccea 100644
--- a/src/main/java/eu/hbp/mip/controllers/AppsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/AppsApi.java
@@ -45,7 +45,6 @@ public class AppsApi {
     private UserRepository userRepository;
 
     @ApiOperation(value = "Get apps", response = App.class, responseContainer = "List")
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.GET)
     public ResponseEntity<Iterable> getApps(
     ) {
@@ -55,7 +54,6 @@ public class AppsApi {
     }
 
     @ApiOperation(value = "Post a vote")
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(value = "/{id}/vote/{value}", method = RequestMethod.POST)
     public ResponseEntity<Void> vote(
             @ApiParam(value = "id", required = true) @PathVariable("id") Integer id,
diff --git a/src/main/java/eu/hbp/mip/controllers/ArticlesApi.java b/src/main/java/eu/hbp/mip/controllers/ArticlesApi.java
index 23c160638f5c9ce96ceb5d489b5b572bfe5478d9..77f8be7c041da077b7935db5c817add2a4dca21c 100644
--- a/src/main/java/eu/hbp/mip/controllers/ArticlesApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ArticlesApi.java
@@ -38,12 +38,10 @@ public class ArticlesApi {
     private ArticleRepository articleRepository;
 
     @ApiOperation(value = "Get articles", response = Article.class, responseContainer = "List")
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.GET)
     public ResponseEntity<Iterable> getArticles(
             @ApiParam(value = "Only ask own articles") @RequestParam(value = "own", required = false) Boolean own,
-            @ApiParam(value = "Only ask results matching status", allowableValues = "{values=[draft, published, closed]}") @RequestParam(value = "status", required = false) String status,
-            @ApiParam(value = "Only ask articles from own team") @RequestParam(value = "team", required = false) Boolean team
+            @ApiParam(value = "Only ask results matching status", allowableValues = "draft, published") @RequestParam(value = "status", required = false) String status
     ) {
         LOGGER.info("Get articles");
 
@@ -75,7 +73,7 @@ public class ArticlesApi {
     }
 
 
-    @ApiOperation(value = "Create an article", response = Void.class)
+    @ApiOperation(value = "Create an article")
     @ApiResponses(value = { @ApiResponse(code = 201, message = "Article created") })
     @RequestMapping(method = RequestMethod.POST)
     public ResponseEntity<Void> addAnArticle(
@@ -138,7 +136,6 @@ public class ArticlesApi {
 
 
     @ApiOperation(value = "Get an article", response = Article.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(value = "/{slug}", method = RequestMethod.GET)
     public ResponseEntity<Article> getAnArticle(
             @ApiParam(value = "slug", required = true) @PathVariable("slug") String slug
@@ -164,7 +161,7 @@ public class ArticlesApi {
     }
 
 
-    @ApiOperation(value = "Update an article", response = Void.class)
+    @ApiOperation(value = "Update an article")
     @ApiResponses(value = { @ApiResponse(code = 204, message = "Article updated") })
     @RequestMapping(value = "/{slug}", method = RequestMethod.PUT)
     public ResponseEntity<Void> updateAnArticle(
diff --git a/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java b/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java
index ebbef8d5ec675c2ae25c9e478ea1a0c0a4f885f5..26780f90911e0e0e620ec10dd3916e1c8eacdf32 100644
--- a/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java
@@ -29,7 +29,6 @@ public class DatasetsApi {
     private DatasetRepository datasetRepository;
 
     @ApiOperation(value = "Get a dataset", response = Dataset.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(value = "/{code}", method = RequestMethod.GET)
     public ResponseEntity<Dataset> getADataset(
             @ApiParam(value = "code", required = true) @PathVariable("code") String code
diff --git a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
index 3e12bfbe1326d0e50e98cb76f84092f29682eec8..eef1bfe88cb4af066d9dde9d316879a4ad3feeea 100644
--- a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
@@ -3,6 +3,7 @@ package eu.hbp.mip.controllers;
 import com.google.common.collect.Lists;
 import com.google.gson.*;
 import eu.hbp.mip.configuration.SecurityConfiguration;
+import eu.hbp.mip.model.ExperimentQuery;
 import eu.hbp.mip.model.User;
 import eu.hbp.mip.utils.HTTPUtil;
 import io.swagger.annotations.*;
@@ -35,14 +36,15 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @RestController
 @RequestMapping(value = "/experiments", produces = {APPLICATION_JSON_VALUE})
 @Api(value = "/experiments", description = "the experiments API")
-@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-07T07:38:20.227Z")
 public class ExperimentApi {
 
     private static final Logger LOGGER = Logger.getLogger(ExperimentApi.class);
 
     private static final String EXAREME_ALGO_JSON_FILE="data/exareme_algorithms.json";
 
-    private static final Gson gson = new GsonBuilder()
+    private static final Gson gson = new Gson();
+
+    private static final Gson gsonOnlyExposed = new GsonBuilder()
             .serializeNulls()
             .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
             .excludeFieldsWithoutExposeAnnotation()
@@ -70,28 +72,25 @@ public class ExperimentApi {
 
 
     @ApiOperation(value = "Send a request to the workflow to run an experiment", response = Experiment.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.POST)
-    public ResponseEntity<String> runExperiment(@RequestBody String incomingQueryString) {
+    public ResponseEntity<String> runExperiment(@RequestBody ExperimentQuery expQuery) {
         LOGGER.info("Run an experiment");
 
-        JsonObject incomingQuery = gson.fromJson(incomingQueryString, JsonObject.class);
-
         Experiment experiment = new Experiment();
         experiment.setUuid(UUID.randomUUID());
         User user = securityConfiguration.getUser();
 
-        experiment.setAlgorithms(incomingQuery.get("algorithms").toString());
-        experiment.setValidations(incomingQuery.get("validations").toString());
-        experiment.setName(incomingQuery.get("name").getAsString());
+        experiment.setAlgorithms(gson.toJson(expQuery.getAlgorithms()));
+        experiment.setValidations(gson.toJson(expQuery.getValidations()));
+        experiment.setName(expQuery.getName());
         experiment.setCreatedBy(user);
-        experiment.setModel(modelRepository.findOne(incomingQuery.get("model").getAsString()));
+        experiment.setModel(modelRepository.findOne(expQuery.getModel()));
         experimentRepository.save(experiment);
 
         LOGGER.info("Experiment saved");
 
         try {
-            if(isExaremeAlgo(experiment))
+            if(isExaremeAlgo(expQuery))
             {
                 sendExaremeExperiment(experiment);
             }
@@ -101,11 +100,10 @@ public class ExperimentApi {
             }
         } catch (MalformedURLException mue) { LOGGER.trace(mue.getMessage()); } // ignore
 
-        return new ResponseEntity<>(gson.toJson(experiment.jsonify()), HttpStatus.OK);
+        return new ResponseEntity<>(gsonOnlyExposed.toJson(experiment.jsonify()), HttpStatus.OK);
     }
 
     @ApiOperation(value = "get an experiment", response = Experiment.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(value = "/{uuid}", method = RequestMethod.GET)
     public ResponseEntity<String> getExperiment(@ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
         LOGGER.info("Get an experiment");
@@ -126,11 +124,10 @@ public class ExperimentApi {
             return new ResponseEntity<>("Not found", HttpStatus.NOT_FOUND);
         }
 
-        return new ResponseEntity<>(gson.toJson(experiment.jsonify()), HttpStatus.OK);
+        return new ResponseEntity<>(gsonOnlyExposed.toJson(experiment.jsonify()), HttpStatus.OK);
     }
 
     @ApiOperation(value = "Mark an experiment as viewed", response = Experiment.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(value = "/{uuid}/markAsViewed", method = RequestMethod.GET)
     public ResponseEntity<String> markExperimentAsViewed(@ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
         LOGGER.info("Mark an experiment as viewed");
@@ -154,11 +151,10 @@ public class ExperimentApi {
 
         LOGGER.info("Experiment updated (marked as viewed)");
 
-        return new ResponseEntity<>(gson.toJson(experiment.jsonify()), HttpStatus.OK);
+        return new ResponseEntity<>(gsonOnlyExposed.toJson(experiment.jsonify()), HttpStatus.OK);
     }
 
     @ApiOperation(value = "Mark an experiment as shared", response = Experiment.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(value = "/{uuid}/markAsShared", method = RequestMethod.GET)
     public ResponseEntity<String> markExperimentAsShared(@ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
         LOGGER.info("Mark an experiment as shared");
@@ -167,7 +163,6 @@ public class ExperimentApi {
     }
 
     @ApiOperation(value = "Mark an experiment as unshared", response = Experiment.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(value = "/{uuid}/markAsUnshared", method = RequestMethod.GET)
     public ResponseEntity<String> markExperimentAsUnshared(@ApiParam(value = "uuid", required = true) @PathVariable("uuid") String uuid) {
         LOGGER.info("Mark an experiment as unshared");
@@ -176,7 +171,6 @@ public class ExperimentApi {
     }
 
     @ApiOperation(value = "list experiments", response = Experiment.class, responseContainer = "List")
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(value = "/mine", method = RequestMethod.GET, params = {"maxResultCount"})
     public ResponseEntity<String> listExperiments(
             @ApiParam(value = "maxResultCount", required = false) @RequestParam int maxResultCount
@@ -187,7 +181,6 @@ public class ExperimentApi {
     }
 
     @ApiOperation(value = "list experiments", response = Experiment.class, responseContainer = "List")
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.GET, params = {"slug", "maxResultCount"})
     public ResponseEntity<String> listExperiments(
             @ApiParam(value = "slug", required = false) @RequestParam("slug") String modelSlug,
@@ -203,7 +196,6 @@ public class ExperimentApi {
     }
 
     @ApiOperation(value = "List available methods and validations", response = String.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(path = "/methods", method = RequestMethod.GET)
     public ResponseEntity<String> listAvailableMethodsAndValidations() throws IOException {
         LOGGER.info("List available methods and validations");
@@ -224,7 +216,7 @@ public class ExperimentApi {
 
         catalog.get("algorithms").getAsJsonArray().add(exaremeAlgo);
 
-        return new ResponseEntity<>(new Gson().toJson(catalog), HttpStatus.valueOf(code));
+        return new ResponseEntity<>(gson.toJson(catalog), HttpStatus.valueOf(code));
     }
 
     private ResponseEntity<String> doListExperiments(
@@ -257,7 +249,7 @@ public class ExperimentApi {
             }
         }
 
-        return new ResponseEntity<>(gson.toJson(expList), HttpStatus.OK);
+        return new ResponseEntity<>(gsonOnlyExposed.toJson(expList), HttpStatus.OK);
     }
 
     private ResponseEntity<String> doMarkExperimentAsShared(String uuid, boolean shared) {
@@ -282,7 +274,7 @@ public class ExperimentApi {
 
         LOGGER.info("Experiment updated (marked as shared)");
 
-        return new ResponseEntity<>(gson.toJson(experiment.jsonify()), HttpStatus.OK);
+        return new ResponseEntity<>(gsonOnlyExposed.toJson(experiment.jsonify()), HttpStatus.OK);
     }
 
     private void sendExperiment(Experiment experiment) throws MalformedURLException {
@@ -353,10 +345,10 @@ public class ExperimentApi {
         experiment.setResult(e.getMessage());
     }
 
-    private static boolean isExaremeAlgo(Experiment experiment)  {
-        JsonArray algorithms = new JsonParser().parse(experiment.getAlgorithms()).getAsJsonArray();
-        String algoCode = algorithms.get(0).getAsJsonObject().get("code").getAsString();
-        return "glm_exareme".equals(algoCode);
+    private static boolean isExaremeAlgo(ExperimentQuery expQuery)  {
+        if (expQuery.getAlgorithms().size() < 1)
+            return false;
+        return "glm_exareme".equals(expQuery.getAlgorithms().get(0).getCode());
     }
 
 }
diff --git a/src/main/java/eu/hbp/mip/controllers/GroupsApi.java b/src/main/java/eu/hbp/mip/controllers/GroupsApi.java
index 07f19aa0187313592ea2635ecd43f702d6da1378..80b3d6fdb3cb642b5547b8b3337e3db78d980b4d 100644
--- a/src/main/java/eu/hbp/mip/controllers/GroupsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/GroupsApi.java
@@ -11,8 +11,6 @@ import com.google.gson.JsonObject;
 import eu.hbp.mip.model.Group;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
 import org.apache.log4j.Logger;
 import org.postgresql.util.PGobject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +31,8 @@ public class GroupsApi {
 
     private static final Logger LOGGER = Logger.getLogger(GroupsApi.class);
 
+    private static final Gson gson = new Gson();
+
     private static String groups;
 
     @Autowired
@@ -41,14 +41,13 @@ public class GroupsApi {
 
 
     @ApiOperation(value = "Get the root group (containing all subgroups)", response = Group.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.GET)
     public ResponseEntity<Object> getTheRootGroup()  {
         LOGGER.info("Get root group and its whole sub-groups tree");
 
         loadGroups();
 
-        return ResponseEntity.ok(new Gson().fromJson(groups, Object.class));
+        return ResponseEntity.ok(gson.fromJson(groups, Object.class));
     }
 
     private void loadGroups() {
@@ -59,10 +58,10 @@ public class GroupsApi {
             data.next();
             String json = ((PGobject) data.getObject("hierarchy")).getValue();
 
-            JsonObject root = new Gson().fromJson(json, JsonObject.class);
+            JsonObject root = gson.fromJson(json, JsonObject.class);
 
             removeVariablesRecursive(root);
-            groups = new Gson().toJson(root);
+            groups = gson.toJson(root);
         }
     }
 
diff --git a/src/main/java/eu/hbp/mip/controllers/ModelsApi.java b/src/main/java/eu/hbp/mip/controllers/ModelsApi.java
index 650b8e37ec27ed762bbbb538dfbf44da60805c91..547b7f4d6d9dbc033ab261cac692721133ebf015 100644
--- a/src/main/java/eu/hbp/mip/controllers/ModelsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ModelsApi.java
@@ -29,7 +29,6 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @RestController
 @RequestMapping(value = "/models", produces = {APPLICATION_JSON_VALUE})
 @Api(value = "/models", description = "the models API")
-@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-07T07:38:20.227Z")
 public class ModelsApi {
 
     private static final Logger LOGGER = Logger.getLogger(ModelsApi.class);
@@ -54,16 +53,13 @@ public class ModelsApi {
 
     @Autowired
     @Qualifier("dataUtil")
-    public DataUtil dataUtil;
+    private DataUtil dataUtil;
 
 
     @ApiOperation(value = "Get models", response = Model.class, responseContainer = "List")
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.GET)
     public ResponseEntity<List> getModels(
-            @ApiParam(value = "Max number of results") @RequestParam(value = "limit", required = false) Integer limit,
             @ApiParam(value = "Only ask own models") @RequestParam(value = "own", required = false) Boolean own,
-            @ApiParam(value = "Only ask models from own team") @RequestParam(value = "team", required = false) Boolean team,
             @ApiParam(value = "Only ask published models") @RequestParam(value = "valid", required = false) Boolean valid
     )  {
         LOGGER.info("Get models");
@@ -193,7 +189,6 @@ public class ModelsApi {
     }
 
     @ApiOperation(value = "Get a model", response = Model.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(value = "/{slug}", method = RequestMethod.GET)
     public ResponseEntity<Model> getAModel(
             @ApiParam(value = "slug", required = true) @PathVariable("slug") String slug
diff --git a/src/main/java/eu/hbp/mip/controllers/RequestsApi.java b/src/main/java/eu/hbp/mip/controllers/RequestsApi.java
index d88d8a0b6ff44a8c36203a08fddce67dbe2ac1e7..bbb864112017eb7c23a788b8a3fdc077fd03d180 100644
--- a/src/main/java/eu/hbp/mip/controllers/RequestsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/RequestsApi.java
@@ -36,9 +36,11 @@ public class RequestsApi {
 
     private static final Logger LOGGER = Logger.getLogger(RequestsApi.class);
 
+    private static final Gson gson = new Gson();
+
     @Autowired
     @Qualifier("dataUtil")
-    public DataUtil dataUtil;
+    private DataUtil dataUtil;
 
 
     @ApiOperation(value = "Post a request", response = Dataset.class)
@@ -59,7 +61,6 @@ public class RequestsApi {
         List<String> covariables = new LinkedList<>();
         List<String> filters = new LinkedList<>();
 
-        Gson gson = new Gson();
         JsonObject q = gson.fromJson(gson.toJson(query, Query.class), JsonObject.class);
 
         JsonArray queryVars = q.getAsJsonArray("variables") != null ? q.getAsJsonArray("variables") : new JsonArray();
@@ -101,7 +102,7 @@ public class RequestsApi {
         dataset.add("filter", gson.toJsonTree(filters));
         dataset.add("data", dataUtil.getDataFromVariables(allVars));
 
-        return ResponseEntity.ok(new Gson().fromJson(dataset, Object.class));
+        return ResponseEntity.ok(gson.fromJson(dataset, Object.class));
     }
 
 
diff --git a/src/main/java/eu/hbp/mip/controllers/StatsApi.java b/src/main/java/eu/hbp/mip/controllers/StatsApi.java
index 875e2a8443b2ad383820b4ad02262f65526836de..4ca4fa9a42dbfa8ccd8cf70fe1df2a1c6c83fbbb 100644
--- a/src/main/java/eu/hbp/mip/controllers/StatsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/StatsApi.java
@@ -10,8 +10,6 @@ import eu.hbp.mip.repositories.UserRepository;
 import eu.hbp.mip.utils.DataUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -37,11 +35,10 @@ public class StatsApi {
 
     @Autowired
     @Qualifier("dataUtil")
-    public DataUtil dataUtil;
+    private DataUtil dataUtil;
 
 
     @ApiOperation(value = "Get general statistics", response = GeneralStats.class)
-    @ApiResponses(value = {@ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(method = RequestMethod.GET)
     public ResponseEntity<GeneralStats> getGeneralStatistics()  {
         LOGGER.info("Get statistics (count on users, articles and variables)");
diff --git a/src/main/java/eu/hbp/mip/controllers/UsersApi.java b/src/main/java/eu/hbp/mip/controllers/UsersApi.java
index c046065bfa72623619065a9d96fa99923dd01b99..38635b6eecab6f0c3b4169672c7c013538a01b21 100644
--- a/src/main/java/eu/hbp/mip/controllers/UsersApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/UsersApi.java
@@ -28,7 +28,6 @@ public class UsersApi {
     private UserRepository userRepository;
 
     @ApiOperation(value = "Get a user", response = User.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(value = "/{username}", method = RequestMethod.GET)
     public ResponseEntity<User> getAUser(
             @ApiParam(value = "username", required = true) @PathVariable("username") String username
diff --git a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
index bad8c4e055218bd82b24292f71e864aaa3219709..065dcaf105de0ba65adf4371779e51c8f2598697 100644
--- a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
@@ -31,6 +31,8 @@ public class VariablesApi {
 
     private static final Logger LOGGER = Logger.getLogger(VariablesApi.class);
 
+    private static final Gson gson = new Gson();
+
     private static LinkedList<String> variables;
 
     @Autowired
@@ -39,7 +41,6 @@ public class VariablesApi {
 
 
     @ApiOperation(value = "Get variables", response = List.class, responseContainer = "List")
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.GET)
     public ResponseEntity<Iterable> getVariables(
             @ApiParam(value = "List of groups formatted like : (\"val1\", \"val2\", ...)") @RequestParam(value = "group", required = false) String group,
@@ -57,14 +58,13 @@ public class VariablesApi {
 
         for (String var : variables)
         {
-            variablesObjects.add(new Gson().fromJson(var, Object.class));
+            variablesObjects.add(gson.fromJson(var, Object.class));
         }
 
         return ResponseEntity.ok(variablesObjects);
     }
 
     @ApiOperation(value = "Get a variable", response = Object.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(value = "/{code}", method = RequestMethod.GET)
     public ResponseEntity<Object> getAVariable(
             @ApiParam(value = "code of the variable ( multiple codes are allowed, separated by \",\" )", required = true) @PathVariable("code") String code
@@ -75,10 +75,10 @@ public class VariablesApi {
 
         for (String var : variables)
         {
-            JsonObject varObj = new Gson().fromJson(var, JsonElement.class).getAsJsonObject();
+            JsonObject varObj = gson.fromJson(var, JsonElement.class).getAsJsonObject();
             if (varObj.get("code").getAsString().equals(code))
             {
-                return ResponseEntity.ok(new Gson().fromJson(varObj, Object.class));
+                return ResponseEntity.ok(gson.fromJson(varObj, Object.class));
             }
         }
 
@@ -89,7 +89,6 @@ public class VariablesApi {
 
 
     @ApiOperation(value = "Get values from a variable", response = List.class, responseContainer = "List")
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(value = "/{code}/values", method = RequestMethod.GET)
     public ResponseEntity<Iterable> getValuesFromAVariable(
             @ApiParam(value = "code", required = true) @PathVariable("code") String code,
@@ -101,13 +100,13 @@ public class VariablesApi {
 
         for (String var : variables)
         {
-            JsonObject varObj = new Gson().fromJson(var, JsonElement.class).getAsJsonObject();
+            JsonObject varObj = gson.fromJson(var, JsonElement.class).getAsJsonObject();
             if (varObj.get("code").getAsString().equals(code))
             {
                 JsonArray values = varObj.get("enumerations").getAsJsonArray();
                 LinkedList<Object> valuesObjects = new LinkedList<>();
                 for (JsonElement value : values){
-                    valuesObjects.add(new Gson().fromJson(value, Object.class));
+                    valuesObjects.add(gson.fromJson(value, Object.class));
                 }
                 return ResponseEntity.ok(valuesObjects);
             }
@@ -119,7 +118,6 @@ public class VariablesApi {
     }
 
     @ApiOperation(value = "Get groups and variables hierarchy", response = Object.class)
-    @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(value = "/hierarchy", method = RequestMethod.GET)
     public ResponseEntity<Object> getVariablesHierarchy(
     )  {
@@ -130,7 +128,7 @@ public class VariablesApi {
         data.next();
         String json = ((PGobject) data.getObject("hierarchy")).getValue();
 
-        Object hierarchy = new Gson().fromJson(json, Object.class);
+        Object hierarchy = gson.fromJson(json, Object.class);
 
         return ResponseEntity.ok(hierarchy);
     }
@@ -144,7 +142,7 @@ public class VariablesApi {
             data.next();
             String json = ((PGobject) data.getObject("hierarchy")).getValue();
 
-            JsonObject root = new Gson().fromJson(json, JsonObject.class);
+            JsonObject root = gson.fromJson(json, JsonObject.class);
 
             variables = new LinkedList<>();
             extractVariablesRecursive(root);
@@ -164,7 +162,7 @@ public class VariablesApi {
                 grp.addProperty("label", element.getAsJsonPrimitive("label").getAsString());
                 var.getAsJsonObject().add("group", grp);
                 var.getAsJsonObject().addProperty("isVariable", true);
-                variables.add(new Gson().toJson(var));
+                variables.add(gson.toJson(var));
             }
         }
     }
diff --git a/src/main/java/eu/hbp/mip/model/Algorithm.java b/src/main/java/eu/hbp/mip/model/Algorithm.java
new file mode 100644
index 0000000000000000000000000000000000000000..862136617dabf95f7e00aa8313124d93b4557c94
--- /dev/null
+++ b/src/main/java/eu/hbp/mip/model/Algorithm.java
@@ -0,0 +1,19 @@
+package eu.hbp.mip.model;
+
+/**
+ * Created by mirco on 09.11.16.
+ */
+
+public class Algorithm extends ExperimentValidator {
+
+    private boolean validation;
+
+    public boolean isValidation() {
+        return validation;
+    }
+
+    public void setValidation(boolean validation) {
+        this.validation = validation;
+    }
+
+}
diff --git a/src/main/java/eu/hbp/mip/model/AlgorithmParam.java b/src/main/java/eu/hbp/mip/model/AlgorithmParam.java
new file mode 100644
index 0000000000000000000000000000000000000000..e4e5eac8ddcb77ea6e5c4af7837af547c2ba6efd
--- /dev/null
+++ b/src/main/java/eu/hbp/mip/model/AlgorithmParam.java
@@ -0,0 +1,27 @@
+package eu.hbp.mip.model;
+
+/**
+ * Created by mirco on 09.11.16.
+ */
+
+public class AlgorithmParam {
+
+    private String code;
+    private String value;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    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 134fc2d18e3bfadbdd6e2dbf519d32385b0e0bc6..f809373282ae46a9490aaba9112e74605a153517 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -20,7 +20,9 @@ public class Experiment {
 
     private static final Logger LOGGER = Logger.getLogger(Experiment.class);
 
-    private static final Gson gson = new GsonBuilder()
+    private static final Gson gson = new Gson();
+
+    private static final Gson gsonOnlyExposed = new GsonBuilder()
             .serializeNulls()
             .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
             .excludeFieldsWithoutExposeAnnotation()
@@ -85,13 +87,13 @@ public class Experiment {
 
     public String computeQuery() {
         JsonObject outgoingQuery = new JsonObject();
-        outgoingQuery.add("algorithms", gson.fromJson(algorithms, JsonArray.class));
-        outgoingQuery.add("validations", gson.fromJson(validations, JsonArray.class));
+        outgoingQuery.add("algorithms", gsonOnlyExposed.fromJson(algorithms, JsonArray.class));
+        outgoingQuery.add("validations", gsonOnlyExposed.fromJson(validations, JsonArray.class));
 
-        outgoingQuery.add("covariables", gson.toJsonTree(model.getQuery().getCovariables()));
-        outgoingQuery.add("variables", gson.toJsonTree(model.getQuery().getVariables()));
-        outgoingQuery.add("filters", gson.toJsonTree(model.getQuery().getFilters()));
-        outgoingQuery.add("grouping", gson.toJsonTree(model.getQuery().getGrouping()));
+        outgoingQuery.add("covariables", gsonOnlyExposed.toJsonTree(model.getQuery().getCovariables()));
+        outgoingQuery.add("variables", gsonOnlyExposed.toJsonTree(model.getQuery().getVariables()));
+        outgoingQuery.add("filters", gsonOnlyExposed.toJsonTree(model.getQuery().getFilters()));
+        outgoingQuery.add("grouping", gsonOnlyExposed.toJsonTree(model.getQuery().getGrouping()));
         return outgoingQuery.toString();
     }
 
@@ -134,11 +136,11 @@ public class Experiment {
         formatEl.setValue("True");
         queryElements.add(formatEl);
 
-        return new Gson().toJson(queryElements);
+        return gson.toJson(queryElements);
     }
 
     public JsonObject jsonify() {
-        JsonObject exp = new Gson().toJsonTree(this).getAsJsonObject();
+        JsonObject exp = gson.toJsonTree(this).getAsJsonObject();
         JsonParser parser = new JsonParser();
 
         if (this.algorithms != null)
diff --git a/src/main/java/eu/hbp/mip/model/ExperimentQuery.java b/src/main/java/eu/hbp/mip/model/ExperimentQuery.java
new file mode 100644
index 0000000000000000000000000000000000000000..333751c438099de62942918e17f019505a800de7
--- /dev/null
+++ b/src/main/java/eu/hbp/mip/model/ExperimentQuery.java
@@ -0,0 +1,46 @@
+package eu.hbp.mip.model;
+
+import java.util.List;
+
+/**
+ * Created by mirco on 09.11.16.
+ */
+public class ExperimentQuery {
+
+    private String name;
+    private String model;
+    private List<ExperimentValidator> validations;
+    private List<Algorithm> algorithms;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public List<ExperimentValidator> getValidations() {
+        return validations;
+    }
+
+    public void setValidations(List<ExperimentValidator> validations) {
+        this.validations = validations;
+    }
+
+    public List<Algorithm> getAlgorithms() {
+        return algorithms;
+    }
+
+    public void setAlgorithms(List<Algorithm> algorithms) {
+        this.algorithms = algorithms;
+    }
+}
diff --git a/src/main/java/eu/hbp/mip/model/ExperimentValidator.java b/src/main/java/eu/hbp/mip/model/ExperimentValidator.java
new file mode 100644
index 0000000000000000000000000000000000000000..208fc90fa7272779bf51e09ca7fa0b6f409c66d3
--- /dev/null
+++ b/src/main/java/eu/hbp/mip/model/ExperimentValidator.java
@@ -0,0 +1,40 @@
+package eu.hbp.mip.model;
+
+import java.util.List;
+
+/**
+ * Created by mirco on 09.11.16.
+ */
+
+public class ExperimentValidator {
+
+    private String code;
+    private String name;
+
+    private List<AlgorithmParam> parameters;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<AlgorithmParam> getParameters() {
+        return parameters;
+    }
+
+    public void setParameters(List<AlgorithmParam> parameters) {
+        this.parameters = parameters;
+    }
+
+}