diff --git a/.bumpversion.cfg b/.bumpversion.cfg
index a9e6d876aadba9018dd4444ae655f5a6aad0219a..5626fa605a3c11fd1558d739a37e0a5eb7e7713b 100644
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 2.9.2
+current_version = 2.9.3
 commit = True
 tag = True
 tag_name = {new_version}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 4424d57a3de2fa2a9cc2decb1ca06a0d4e178170..c4296ef6eebbdd329b63b27e12c4ebcd41992202 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -6,6 +6,7 @@ repos:
     - id: end-of-file-fixer
       exclude: .bumpversion.cfg
     - id: check-merge-conflict
+      exclude: LICENSE
     - id: check-added-large-files
     - id: check-yaml
     - id: check-json
diff --git a/hbp.yml b/hbp.yml
index 944af46cff5e075822bd8b6b25da28fdbc3016eb..6e6fcd1f7a02989a909a567bd775313a679dacc0 100644
--- a/hbp.yml
+++ b/hbp.yml
@@ -58,9 +58,9 @@ testing:
     command: ./test.sh
 
 release_management:
-  current_version: 2.9.2
-  current_code_release: https://github.com/HBPMedical/portal-backend/archive/2.9.2.zip
-  current_binary_release: https://pypi.python.org/pypi/portal-backend/2.9.2
+  current_version: 2.9.3
+  current_code_release: https://github.com/HBPMedical/portal-backend/archive/2.9.3.zip
+  current_binary_release: https://pypi.python.org/pypi/portal-backend/2.9.3
   release_script: 'publish.sh'
 
 continuous_integration:
@@ -75,10 +75,10 @@ continuous_integration:
 distribution:
   docker_hub:
     name: hbpmip/portal-backend
-    current_tag: 2.9.2
+    current_tag: 2.9.3
     url: https://hub.docker.com/r/hbpmip/portal-backend/
     badge: https://img.shields.io/badge/docker-hbpmip%2Fportal--backend-008bb8.svg
-    command: docker pull hbpmip/portal-backend:2.9.2
+    command: docker pull hbpmip/portal-backend:2.9.3
 
 planning:
   github:
diff --git a/pom.xml b/pom.xml
index da8cae4dc32584e10eb4827871bb5a416b460145..f8c622e0f3366184d2322bd29b9089ed026cfbad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
 
     <groupId>eu.hbp.mip</groupId>
     <artifactId>portal-backend</artifactId>
-    <version>2.9.2</version><!-- BUMP_VERSION -->
+    <version>2.9.3</version><!-- BUMP_VERSION -->
     <packaging>jar</packaging>
 
     <name>portal-backend</name>
@@ -47,9 +47,9 @@
         <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>2.9.6</woken-messages.version>
+        <woken-messages.version>3.0.1</woken-messages.version>
         <javax-inject.version>1</javax-inject.version>
-        <akka.version>2.5.20</akka.version>
+        <akka.version>2.5.21</akka.version>
         <spring-context.version>4.3.4.RELEASE</spring-context.version>
         <protobuf-java.version>3.1.0</protobuf-java.version>
 
diff --git a/src/main/java/eu/hbp/mip/StartupTasks.java b/src/main/java/eu/hbp/mip/StartupTasks.java
index fa58eaf924ef9826e7eadb6ac182b85acc2a9341..acbf8f0c9d1ccd557c0ffe4e118d841eab8f2b03 100644
--- a/src/main/java/eu/hbp/mip/StartupTasks.java
+++ b/src/main/java/eu/hbp/mip/StartupTasks.java
@@ -47,7 +47,7 @@ public class StartupTasks implements ApplicationListener<ApplicationReadyEvent>
         for (int i = 0; i < 5; i++) {
             try {
                 for (Dataset dataset : datasetsApi.fetchDatasets()) {
-                    final String code = dataset.dataset().code();
+                    final String code = dataset.id().code();
                     Variable v = variableRepository.findOne(code);
                     if (v == null) {
                         LOGGER.info("Store additional variable {}", code);
diff --git a/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java b/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java
index 99d5b8497cd9fad5b2843b1621293e26d5f6dfe8..7798b0ab9069dedb526cc24d7e2e5849b19987c8 100644
--- a/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java
@@ -49,7 +49,7 @@ public class DatasetsApi extends WokenClientController {
             for (Dataset d: fetchDatasets()) {
                 DatasetDescription dataset = new DatasetDescription();
                 LOGGER.info("Dataset {}", d);
-                dataset.setCode(d.dataset().code());
+                dataset.setCode(d.id().code());
                 dataset.setLabel(d.label());
                 dataset.setDescription(d.description());
                 dataset.setAnonymisationLevel(d.anonymisationLevel().toString());
diff --git a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
index 5e4620f9cec3b368d569003e921f9a1edaabc07c..d94514c6e78eda1e10c0db3459671dd2a3e770f8 100644
--- a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
@@ -1,6 +1,7 @@
 package eu.hbp.mip.controllers;
 
 import akka.dispatch.OnSuccess;
+import ch.chuv.lren.mip.portal.WokenConversions;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
@@ -269,11 +270,9 @@ public class ExperimentApi extends WokenClientController {
                 } else {
                     if (queryResult.error().nonEmpty()) {
                         experiment.setHasServerError(true);
-                        experiment.setResult(queryResult.error().get());
                         LOGGER.error("Experiment failed with message: " + queryResult.error().get());
-                    } else {
-                        experiment.setResult(queryResult.data().get().compactPrint());
                     }
+                    experiment.setResult(new WokenConversions().toJson(queryResult));
                     experiment.setFinished(Date.from(queryResult.timestamp().toInstant()));
                     experimentRepository.save(experiment);
                     LOGGER.info("Experiment " + uuid + " updated (finished)");
diff --git a/src/main/java/eu/hbp/mip/controllers/MiningApi.java b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
index 21720df3028c9f4893555ee50bcaf59af91ce6be..bf89261eb14fab25a0adf5bf7dd3e07ff43235e6 100644
--- a/src/main/java/eu/hbp/mip/controllers/MiningApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
@@ -2,11 +2,9 @@ package eu.hbp.mip.controllers;
 
 import com.google.gson.Gson;
 import eu.hbp.mip.akka.WokenClientController;
-import eu.hbp.mip.configuration.SecurityConfiguration;
 import eu.hbp.mip.model.Mining;
 import eu.hbp.mip.model.User;
 import eu.hbp.mip.model.UserInfo;
-import eu.hbp.mip.utils.HTTPUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
@@ -22,7 +20,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 import scala.Option;
 
-import java.io.IOException;
 import java.sql.Date;
 
 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@@ -61,7 +58,7 @@ public class MiningApi extends WokenClientController {
                     return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("{\"error\":\"" + result.error().get() + "\"}");
                 } else {
                     Mining mining = new Mining(
-                        unwrap(result.jobId()),
+                        result.jobId(),
                         result.node(),
                         unwrap(result.algorithm()),
                         result.type().mime(),
diff --git a/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala b/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala
index a0240df7d4bf4111be1ae4819266a6a120f377df..6abe7b362661e997730feae6a0790785ca13784e 100644
--- a/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala
+++ b/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala
@@ -2,9 +2,10 @@ package ch.chuv.lren.mip.portal
 
 import eu.hbp.mip.model.Variable
 import ch.chuv.lren.woken.messages.datasets.DatasetId
+import ch.chuv.lren.woken.messages.query.QueryResult
 import ch.chuv.lren.woken.messages.query.filters.FilterRule
 import ch.chuv.lren.woken.messages.query.filters.FilterRule._
-import ch.chuv.lren.woken.messages.query.filters.queryFiltersProtocol._
+import ch.chuv.lren.woken.messages.query.queryProtocol._
 import org.springframework.stereotype.Component
 import spray.json._
 
@@ -24,4 +25,6 @@ class WokenConversions {
 
   def toSqlWhere(filter: Option[FilterRule]): String = filter.fold("")(_.toSqlWhere)
 
+  def toJson(result: QueryResult): String =
+    result.toJson.compactPrint
 }