diff --git a/pom.xml b/pom.xml
index 5f82f829369a0e53cad70c5eea1804fe10dc0841..51120dec5649e3dee5ec64f7514c6e2c26111f0f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,11 +47,18 @@
         <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.1.8</woken-messages.version>
+        <woken-messages.version>2.2.4</woken-messages.version>
         <javax-inject.version>1</javax-inject.version>
-        <akka.version>2.5.8</akka.version>
+        <akka.version>2.5.9</akka.version>
         <spring-context.version>4.3.4.RELEASE</spring-context.version>
         <protobuf-java.version>3.1.0</protobuf-java.version>
+
+        <scala.epoch.version>2.11</scala.epoch.version>
+        <scala.release.version>2.11.11</scala.release.version>
+
+        <scala.zinc.version>1.1.0</scala.zinc.version>
+        <scala.plugin.macro.version>2.1.1</scala.plugin.macro.version>
+
     </properties>
 
     <repositories>
@@ -210,6 +217,19 @@
             <artifactId>protobuf-java</artifactId>
             <version>${protobuf-java.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.scala-lang</groupId>
+            <artifactId>scala-library</artifactId>
+            <version>${scala.release.version}</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.scala-lang</groupId>
+            <artifactId>scala-reflect</artifactId>
+            <version>${scala.release.version}</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <pluginRepositories>
@@ -276,10 +296,13 @@
                     </execution>
                 </executions>
             </plugin>
+            <!-- Disable default compiler. -->
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>${maven-compiler-plugin.version}</version>
                 <configuration>
+                    <skip>true</skip>
+                    <skipMain>true</skipMain>
                     <source>${java.version}</source>
                     <target>${java.version}</target>
                 </configuration>
@@ -321,6 +344,60 @@
                 <artifactId>sonar-maven-plugin</artifactId>
                 <version>${sonar-maven-plugin.version}</version>
             </plugin>
+            <plugin>
+                <groupId>com.carrotgarden.maven</groupId>
+                <artifactId>scalor-maven-plugin_2.12</artifactId>
+                <version>1.0.3.20180115180433</version>
+                <configuration>
+                    <!-- Required bridge. -->
+                    <defineBridge>
+                        <dependency>
+                            <groupId>org.scala-sbt</groupId>
+                            <artifactId>compiler-bridge_${scala.epoch.version}</artifactId>
+                            <version>${scala.zinc.version}</version>
+                        </dependency>
+                    </defineBridge>
+
+                    <!-- Required compiler. -->
+                    <defineCompiler>
+                        <dependency>
+                            <groupId>org.scala-lang</groupId>
+                            <artifactId>scala-compiler</artifactId>
+                            <version>${scala.release.version}</version>
+                        </dependency>
+                    </defineCompiler>
+                    <definePluginList></definePluginList>
+                </configuration>
+                <executions>
+                    <execution>
+
+                        <!-- Subset of available. -->
+                        <goals>
+
+                            <!-- Setup Eclipse plugin. -->
+                            <goal>eclipse-config</goal>
+
+                            <!-- Remove build state cache. -->
+                            <goal>clean-main</goal>
+                            <goal>clean-test</goal>
+
+                            <!-- Add compilation sources. -->
+                            <goal>register-main</goal>
+                            <goal>register-test</goal>
+
+                            <!-- Compile sources. -->
+                            <goal>compile-main</goal>
+                            <goal>compile-test</goal>
+
+                            <!-- Link runtime script. -->
+                            <!--goal>link-scala-js-main</goal>
+                            <goal>link-scala-js-test</goal-->
+
+                        </goals>
+
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/src/main/java/eu/hbp/mip/akka/ExperimentActor.java b/src/main/java/eu/hbp/mip/akka/ExperimentActor.java
index f6fa19a65f99dac8a28d567a4a18b413576a1443..bd597509931962be9e68063441231268bc401855 100644
--- a/src/main/java/eu/hbp/mip/akka/ExperimentActor.java
+++ b/src/main/java/eu/hbp/mip/akka/ExperimentActor.java
@@ -46,7 +46,7 @@ public class ExperimentActor extends AbstractActor {
                 experiment.setHasServerError(true);
                 experiment.setResult(queryResult.error().get());
             } else {
-                experiment.setResult(queryResult.data().get());
+                experiment.setResult(queryResult.data().get().compactPrint());
             }
             experiment.setFinished(Date.from(queryResult.timestamp().toInstant()));
             experimentRepository.save(experiment);
diff --git a/src/main/java/eu/hbp/mip/controllers/MiningApi.java b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
index 5d87770ad8a65846e3216f8e26cee34de03cb4ec..97535eceb5232e25ba2bdb7e2753b68cf7d8ccec 100644
--- a/src/main/java/eu/hbp/mip/controllers/MiningApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
@@ -71,10 +71,10 @@ public class MiningApi {
             Mining mining = new Mining(
                     result.jobId(),
                     result.node(),
-                    result.function(),
+                    result.algorithm(),
                     result.shape(),
                     Date.from(result.timestamp().toInstant()),
-                    result.data().get()
+                    result.data().get().compactPrint()
             );
             return ResponseEntity.ok(gson.toJson(mining.jsonify()));
         }
diff --git a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
index 17770f1a50b740f102157d2c0a54c819c860233a..e3eeadaf38b5285a1b10bbc41eca64da1fc33cb9 100644
--- a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
@@ -9,6 +9,7 @@ import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
+import eu.hbp.mip.configuration.SecurityConfiguration;
 import eu.hbp.mip.model.Algorithm;
 import eu.hbp.mip.model.MiningQuery;
 import eu.hbp.mip.model.Variable;
@@ -47,6 +48,8 @@ public class VariablesApi {
     @Value("#{'${spring.featuresDatasource.main-table:features}'}")
     private String featuresMainTable;
 
+    @Autowired
+    private SecurityConfiguration securityConfiguration;
 
     @ApiOperation(value = "Get variables", response = List.class, responseContainer = "List")
     @Cacheable("variables")
diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index 5412c38dbb5f5c65a788fde8b9d02039b333e945..2410eecd0a0eb75b673ff74fde02a4816561ca1f 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -86,9 +86,9 @@ public class Experiment {
         */
     }
 
-    public ExperimentQuery prepareQuery() {
+    public ExperimentQuery prepareQuery(String user) {
         if (model == null || model.getQuery() == null)
-            return new ExperimentQuery(null, null, null, null, null, null);
+            return new ExperimentQuery(null, null, null, null, null, null, null, null, null, null, null);
 
         List<AlgorithmSpec> algorithms = new LinkedList<>();
         Type algoList = new TypeToken<LinkedList<eu.hbp.mip.model.Algorithm>>(){}.getType();
@@ -114,8 +114,9 @@ public class Experiment {
         scala.collection.immutable.List<ValidationSpec> validationsSeq = JavaConversions.asScalaBuffer(validations).toList();
 
         String filters = model.getQuery().getFilters();
+        UserId userId = new UserId(user);
 
-        return new ExperimentQuery(variablesSeq, covariablesSeq, groupingSeq, filters, algorithmsSeq, validationsSeq);
+        return new ExperimentQuery(user, variablesSeq, covariablesSeq, groupingSeq, filters, algorithmsSeq, validationsSeq);
     }
 
 
diff --git a/src/main/java/eu/hbp/mip/model/Mining.java b/src/main/java/eu/hbp/mip/model/Mining.java
index 354fbee53ac0c040ae50f34808f11fece7588970..46cfd6c3ec64b0a7e552cd4f6e210a24a746fc1e 100644
--- a/src/main/java/eu/hbp/mip/model/Mining.java
+++ b/src/main/java/eu/hbp/mip/model/Mining.java
@@ -8,12 +8,12 @@ public class Mining {
 
     private static final Gson gson = new Gson();
 
-    private String jobId;
-    private String node;
-    private String function;
-    private String shape;
-    private Date timestamp;
-    private String data;
+    private final String jobId;
+    private final String node;
+    private final String function;
+    private final String shape;
+    private final Date timestamp;
+    private final String data;
 
     public Mining(String jobId, String node, String function, String shape, Date timestamp, String data) {
         this.jobId = jobId;
diff --git a/src/main/java/eu/hbp/mip/model/MiningQuery.java b/src/main/java/eu/hbp/mip/model/MiningQuery.java
index 41a9cf74cb08de8d6ec427af2a6c98ae2fa837c3..2ef84a8eaa463c4959d4659b27bb615abb026f11 100644
--- a/src/main/java/eu/hbp/mip/model/MiningQuery.java
+++ b/src/main/java/eu/hbp/mip/model/MiningQuery.java
@@ -1,6 +1,7 @@
 package eu.hbp.mip.model;
 
 import com.google.gson.Gson;
+import eu.hbp.mip.woken.messages.external.UserId;
 import eu.hbp.mip.woken.messages.external.VariableId;
 import eu.hbp.mip.utils.TypesConvert;
 
@@ -12,19 +13,25 @@ import java.util.List;
  */
 public class MiningQuery {
 
+    private String user;
     private List<Variable> variables;
     private List<Variable> covariables;
     private List<Variable> grouping;
     private String filters;
     private Algorithm algorithm;
 
-    public MiningQuery() {
+    public MiningQuery(String user) {
+        this.user = user;
         this.variables = new LinkedList<>();
         this.covariables = new LinkedList<>();
         this.grouping = new LinkedList<>();
         this.filters = "";
     }
 
+    public String getUser() {
+        return user;
+    }
+
     public List<Variable> getVariables() {
         return variables;
     }
@@ -79,8 +86,9 @@ public class MiningQuery {
         scala.collection.immutable.List<VariableId> variablesSeq = TypesConvert.variablesToVariableIds(variables);
         scala.collection.immutable.List<VariableId> covariablesSeq = TypesConvert.variablesToVariableIds(covariables);
         scala.collection.immutable.List<VariableId> groupingSeq = TypesConvert.variablesToVariableIds(grouping);
+        UserId userId = new UserId(user);
 
-        return new eu.hbp.mip.woken.messages.external.MiningQuery(
+        return new eu.hbp.mip.woken.messages.external.MiningQuery(userId,
                 variablesSeq, covariablesSeq, groupingSeq, filters, scalaAlgorithm);
     }