diff --git a/.gitignore b/.gitignore
index ae5f085df619e4faf11263c8af42121396ec16d9..cddf03602a35709c94e0d191f9fe37af69e5757e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
 .gradle/
 .idea/
 build/dependencyUpdates/
+venv/
+*/out/
+logs/
diff --git a/benchmark/.gitignore b/benchmark/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..54c5c0b024dab04da2a43d4135ed67ed2a670b46
--- /dev/null
+++ b/benchmark/.gitignore
@@ -0,0 +1,2 @@
+/build/
+logs/
diff --git a/benchmark/build.gradle b/benchmark/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..dfcc1d42edbaf81885917bd8b31573056ba29dbb
--- /dev/null
+++ b/benchmark/build.gradle
@@ -0,0 +1,36 @@
+apply plugin: 'application'
+
+dependencies {
+    compile project(':eraser-base')
+    compile project(':feedbackloop.learner_backup')
+    compile project(':datasets')
+    testImplementation 'junit:junit:4.12'
+    // https://mvnrepository.com/artifact/org.hamcrest/java-hamcrest
+    // https://mvnrepository.com/artifact/org.hamcrest/hamcrest-core
+    testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'
+    implementation group: 'com.opencsv', name: 'opencsv', version: '4.1'
+    // https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient
+    compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.0-alpha4'
+    testCompile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.2'
+    // https://mvnrepository.com/artifact/org.apache.httpcomponents/fluent-hc
+    compile group: 'org.apache.httpcomponents', name: 'fluent-hc', version: '4.2.1'
+    // https://mvnrepository.com/artifact/junit/junit
+    testCompile group: 'junit', name: 'junit', version: '4.4'
+    
+}
+
+run {
+    mainClassName = 'de.tudresden.inf.st.eraser.benchmark.Main'
+    standardInput = System.in
+    if (project.hasProperty("appArgs")) {
+        args Eval.me(appArgs)
+    }
+}
+
+sourceSets {
+    main {
+        java {
+            srcDir 'src/main/java'
+        }
+    }
+}
diff --git a/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Benchmark.java b/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Benchmark.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c1d64d5be93238589167e0c474218d3b22a952f
--- /dev/null
+++ b/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Benchmark.java
@@ -0,0 +1,146 @@
+package de.tudresden.inf.st.eraser.benchmark;
+
+import com.opencsv.CSVReader;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.entity.ContentType;
+import org.apache.http.util.EntityUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import java.io.File;
+import java.io.FileReader;
+import java.util.Arrays;
+
+public class Benchmark {
+
+    //read every 5 s from csv
+    //activity CSV
+    /**
+     * Col 1: smartphone acceleration x
+     * Col 2: smartphone acceleration y
+     * Col 3: smartphone acceleration z
+     * Col 4: smartphone rotation x
+     * Col 5: smartphone rotation y
+     * Col 6: smartphone rotation z
+     * Col 7: watch acceleration x
+     * Col 8: watch acceleration y
+     * Col 9: watch acceleration z
+     * Col 10: watch rotation x
+     * Col 11: watch rotation y
+     * Col 12: watch rotation z/*/
+    //preference CSV
+    /**
+     * Col 1: Activity
+     * Col 2: watch brightness range "bright, medium, dimmer, dark"*/
+
+    private String a_csv_file_path;
+    private String p_csv_file_path;
+    private static final Logger logger = LogManager.getLogger(Benchmark.class);
+    private static final String ERASER_ITEM_URI = "http://localhost:4567/model/items/";
+    //TODO ITEM_NAME HAS TO BE DISCUSSED
+    private static final String[] ACTIVITY_ITEM_NAME = {
+            "m_accel_x", "m_accel_y", "m_accel_z", "m_rotation_x",
+            "m_rotation_y", "m_rotation_z", "w_accel_x", "w_accel_y",
+            "w_accel_z", "w_rotation_x", "w_rotation_y", "w_rotation_z"};
+    private static final String[] PREFERENCE_ITEM_NAME = {
+           "w_brightness"
+    };
+    private static boolean flag2 = true;
+    //csv_type is activity or preference
+    Benchmark(String a_csv_file_path, String p_csv_file_path) {
+        this.a_csv_file_path = a_csv_file_path;
+        this.p_csv_file_path = p_csv_file_path;
+    }
+
+    void start(){
+        String PREFERENCE_URL = "http://localhost:4567/model/items/iris1_item/state";
+        String ACTIVITY_URL = "http://localhost:4567/activity/current";
+        int TIME_PERIOD = 5000;
+        File a_file;
+        File p_file;
+        FileReader a_file_reader;
+        FileReader p_file_reader;
+        CSVReader a_csv_reader;
+        CSVReader p_csv_reader;
+        String[] a_next_record;
+        String[] p_next_record;
+        boolean flag1;
+        a_file=new File(a_csv_file_path);
+        p_file= new File(p_csv_file_path);
+        try {
+            a_file_reader =new FileReader(a_file);
+            p_file_reader=new FileReader(p_file);
+            a_csv_reader = new CSVReader(a_file_reader);
+            p_csv_reader = new CSVReader(p_file_reader);
+            while ((((a_next_record = a_csv_reader.readNext())!= null) && flag2)){
+                try{Thread.sleep(TIME_PERIOD);}catch (InterruptedException e){e.printStackTrace();}
+                String[] values = Arrays.copyOf(a_next_record,12);
+                setNewValue(values, ACTIVITY_ITEM_NAME,"activity");
+                HttpResponse response= Request.Get(ACTIVITY_URL).execute().returnResponse();
+                String status = response.getStatusLine().toString();
+                if(status.contains("200")){
+                    flag1 = true;
+                    logger.info("activity should be (read direct from CSV): " + a_next_record[12]);
+                    logger.info(EntityUtils.toString(response.getEntity()));
+                    logger.info("get activity from web server: response 200 ok");
+                }else{
+                    flag1 = false;
+                    flag2 = false;
+                    logger.info("can not get the activity from the web server");
+                }
+                while((((p_next_record = p_csv_reader.readNext()) != null) && flag1)) {
+                    try{Thread.sleep(TIME_PERIOD);}catch (InterruptedException e){e.printStackTrace();}
+                    String[] values1 = Arrays.copyOf(p_next_record,2);
+                    setNewValue(values1, PREFERENCE_ITEM_NAME,"preference");
+                    HttpResponse response1= Request.Get(PREFERENCE_URL).execute().returnResponse();
+                    String status1=response1.getStatusLine().toString();
+                    if(status1.contains("200")){
+                        flag2 = true;
+                        logger.info("get the iris1_item preference from web server: response 200 ok, value is: "+EntityUtils.toString(response1.getEntity()));
+                    }else {flag2 = false;
+                    logger.info("can not get the iris1_item from the web server");}
+                    break;
+                }
+            }
+        }
+        catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+    private void setNewValue(String[] values, String[] name, String file_typ){
+        if(file_typ.equals("activity"))
+        {
+            int i = 0;
+            for(String value : values){
+                String uri = ERASER_ITEM_URI + name[i] + "/state";
+                try {
+                    HttpResponse httpResponse = Request.Put(uri)
+                            .bodyString(value, ContentType.TEXT_PLAIN)
+                            .execute().returnResponse();
+                    String status=httpResponse.getStatusLine().toString();
+                    if(status.contains("200")){
+                        logger.info("put activity input name: "+name[i]+", value: "+value+"to web server: response 200 ok");
+                    }else{
+                        logger.info("can not put activity inputs to rest server");
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+                i+=1;
+            }
+        }else{
+            String uri= ERASER_ITEM_URI + "w_brightness" +"/state";
+            try {
+                HttpResponse httpResponse = Request.Put(uri)
+                        .bodyString(values[1], ContentType.TEXT_PLAIN)
+                        .execute().returnResponse();
+                String put_response=httpResponse.getStatusLine().toString();
+                if (put_response.contains("200")){logger.info("put w_brightness to web server: response 200 ok");}else{
+                    logger.info("can not put w_brightness to rest server");
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Main.java b/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac7536cae53749132be31ebe028e5ec0e55c30f4
--- /dev/null
+++ b/benchmark/src/main/java/de/tudresden/inf/st/eraser/benchmark/Main.java
@@ -0,0 +1,12 @@
+package de.tudresden.inf.st.eraser.benchmark;
+
+public class Main {
+
+    public static void main(String[] args) {
+        String A_CSV_FILE_PATH = "../datasets/backup/activity_data.csv";
+        String P_CSV_FILE_PATH = "../datasets/backup/preference_data.csv";
+        Benchmark benchmark=new Benchmark(A_CSV_FILE_PATH,P_CSV_FILE_PATH);
+        benchmark.start();
+    }
+}
+
diff --git a/feedbackloop.learner_backup/out/production/resources/log4j2.xml b/benchmark/src/main/resources/log4j2.xml
similarity index 100%
rename from feedbackloop.learner_backup/out/production/resources/log4j2.xml
rename to benchmark/src/main/resources/log4j2.xml
diff --git a/datasets/.gitignore b/datasets/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..567609b1234a9b8806c5a05da6c866e480aa148d
--- /dev/null
+++ b/datasets/.gitignore
@@ -0,0 +1 @@
+build/
diff --git a/datasets/backup/activity_data.csv b/datasets/backup/activity_data.csv
index 12c125ce2bbdc9ec6bb9762f05f6a83c3b863bb0..c32f9706f812e54cc6dc58a1876c806503530d9e 100644
--- a/datasets/backup/activity_data.csv
+++ b/datasets/backup/activity_data.csv
@@ -1,418 +1,369 @@
-7,20,12,13,2
-7,20,14,40,1
-7,20,14,40,2
-7,21,13,2,2
-7,21,13,2,2
-7,21,14,23,2
-7,21,14,23,2
-7,21,15,41,2
-7,21,16,54,2
-7,21,16,54,2
-7,21,17,45,3
-7,22,12,28,3
-7,22,15,35,2
-7,22,15,35,2
-7,22,18,59,3
-7,22,18,59,3
-7,23,12,32,2
-7,23,12,32,2
-7,23,16,7,2
-7,23,16,7,2
-7,23,16,7,2
-7,23,16,7,2
-7,23,16,7,2
-7,24,12,4,0
-7,24,12,4,0
-7,24,12,4,1
-7,24,14,38,2
-7,24,14,38,2
-7,24,18,54,3
-7,25,12,31,0
-7,25,12,32,1
-7,25,12,32,1
-7,25,15,6,3
-7,25,18,56,3
-7,26,13,41,2
-7,26,19,14,3
-7,27,11,39,2
-7,27,11,39,3
-7,27,11,46,3
-7,27,11,46,2
-7,27,13,8,2
-7,27,13,8,2
-7,27,13,9,2
-7,27,13,45,2
-7,27,13,45,2
-7,27,15,38,3
-7,28,12,12,2
-7,28,12,13,2
-7,28,12,41,2
-7,28,12,41,2
-7,28,12,41,2
-7,28,14,0,1
-7,28,14,0,2
-7,28,15,21,3
-7,28,18,56,3
-7,29,10,9,1
-7,29,10,9,1
-7,29,10,9,1
-7,29,11,54,0
-7,29,11,54,0
-7,29,11,54,0
-7,29,11,54,1
-7,29,14,10,2
-7,29,16,44,2
-7,29,16,44,2
-7,30,16,7,3
-7,30,18,45,3
-7,31,13,2,0
-7,31,13,2,1
-7,31,13,3,1
-7,31,13,3,1
-7,31,13,3,1
-7,31,18,39,3
-8,1,12,22,0
-8,1,12,22,1
-8,1,14,20,2
-8,1,14,20,2
-8,1,14,20,2
-8,1,15,55,3
-8,1,18,31,3
-8,1,18,37,3
-8,1,18,37,3
-8,1,19,2,3
-8,1,19,2,3
-8,1,20,5,3
-8,2,10,9,2
-8,2,10,9,1
-8,2,10,9,2
-8,2,10,9,2
-8,2,13,58,2
-8,2,13,58,2
-8,2,15,44,3
-8,2,15,44,3
-8,2,15,44,3
-8,2,17,21,3
-8,2,17,21,3
-8,2,17,21,3
-8,3,13,31,1
-8,3,13,31,2
-8,3,13,32,2
-8,3,16,43,3
-8,4,13,20,1
-8,4,13,20,2
-8,4,18,27,3
-8,5,13,37,2
-8,5,13,37,2
-8,5,18,33,3
-8,6,11,24,3
-8,6,11,24,3
-8,6,11,24,3
-8,6,13,50,3
-8,7,13,4,2
-8,7,13,4,2
-8,7,14,56,3
-8,8,12,13,2
-8,8,12,13,2
-8,8,15,51,2
-8,8,15,51,2
-8,8,15,51,3
-8,9,13,32,2
-8,9,13,32,2
-8,9,13,32,2
-8,9,15,8,2
-8,9,15,8,2
-8,9,15,8,2
-8,9,16,19,2
-8,10,11,32,0
-8,10,11,32,1
-8,10,11,32,1
-8,10,13,13,1
-8,10,13,13,1
-8,10,13,13,2
-8,10,16,42,3
-8,10,16,42,3
-8,11,14,6,2
-8,11,14,7,2
-8,11,18,54,3
-8,11,18,54,3
-8,11,18,54,3
-8,12,12,27,1
-8,12,12,27,1
-8,12,12,28,1
-8,12,13,53,2
-8,12,13,53,2
-8,12,13,53,2
-8,12,15,21,3
-8,13,13,16,1
-8,13,13,16,1
-8,13,13,16,1
-8,13,14,14,2
-8,13,14,14,2
-8,13,16,11,3
-8,13,17,18,3
-8,14,13,7,1
-8,14,13,7,1
-8,14,13,7,1
-8,14,13,7,1
-8,14,13,7,2
-8,14,13,7,2
-8,14,15,6,3
-8,15,14,5,2
-8,15,14,5,2
-8,15,14,6,2
-8,15,14,6,2
-8,15,16,41,3
-8,15,16,41,3
-8,15,17,30,3
-8,16,13,40,2
-8,16,13,40,2
-8,16,17,52,3
-8,16,17,53,3
-8,17,13,34,1
-8,17,13,35,2
-8,17,14,7,2
-8,17,19,2,3
-8,18,10,21,3
-8,18,11,14,2
-8,18,11,14,2
-8,18,11,14,2
-8,18,11,14,2
-8,18,14,25,2
-8,18,14,25,3
-8,18,14,25,2
-8,18,18,18,3
-8,18,18,19,3
-8,19,18,33,3
-8,19,18,33,3
-8,19,18,33,3
-8,19,18,33,3
-8,20,14,28,2
-8,20,14,28,2
-8,20,14,28,2
-8,20,14,28,2
-8,20,17,8,3
-8,20,18,22,3
-8,21,11,24,1
-8,21,11,24,1
-8,21,11,24,1
-8,21,15,34,3
-8,21,18,55,3
-8,22,12,3,1
-8,22,12,4,2
-8,22,12,4,2
-8,22,13,51,2
-8,22,13,51,2
-8,22,13,51,2
-8,22,18,12,3
-8,22,18,12,3
-8,22,18,12,3
-8,22,18,12,3
-8,22,18,40,3
-8,22,18,40,3
-8,23,13,42,1
-8,23,13,42,1
-8,23,17,32,3
-8,23,19,28,3
-8,23,20,27,3
-8,23,20,27,3
-8,23,21,49,3
-8,24,14,0,2
-8,24,14,0,2
-8,24,14,0,2
-8,24,14,0,2
-8,24,15,4,3
-8,24,15,4,3
-8,24,16,2,3
-8,24,16,3,3
-8,24,16,37,3
-8,24,17,9,3
-8,24,17,14,3
-8,25,13,34,1
-8,25,13,34,1
-8,25,13,34,1
-8,25,13,34,1
-8,25,13,34,1
-8,25,15,1,3
-8,25,17,58,3
-8,26,10,29,0
-8,26,10,29,0
-8,26,10,29,0
-8,26,10,29,0
-8,26,10,29,0
-8,26,16,42,3
-8,26,16,42,3
-8,26,18,41,3
-8,26,18,41,3
-8,27,13,41,2
-8,27,13,41,2
-8,27,13,41,2
-8,27,13,41,2
-8,27,17,42,3
-8,28,11,9,1
-8,28,11,9,1
-8,28,12,14,0
-8,28,12,14,1
-8,28,12,14,0
-8,28,15,3,2
-8,28,15,3,2
-8,28,16,31,3
-8,28,17,40,3
-8,29,14,44,3
-8,29,17,25,3
-8,30,12,5,0
-8,30,12,5,0
-8,30,12,5,0
-8,30,13,32,1
-8,30,13,32,1
-8,30,13,56,2
-8,30,14,23,2
-8,30,14,23,2
-8,30,14,23,2
-8,30,14,23,2
-8,30,14,41,2
-8,30,14,41,2
-8,30,14,41,2
-8,30,15,50,3
-8,30,17,0,3
-8,30,18,59,3
-8,30,18,59,3
-8,31,14,31,2
-8,31,14,31,2
-8,31,14,31,2
-8,31,17,59,3
-8,31,18,0,3
-9,1,16,13,3
-9,1,16,13,3
-9,1,16,13,3
-9,1,17,41,3
-9,2,13,44,1
-9,2,13,44,1
-9,2,13,44,1
-9,2,14,49,2
-9,2,14,49,2
-9,2,14,49,2
-9,2,16,6,3
-9,2,16,6,3
-9,2,17,2,3
-9,3,16,9,3
-9,3,17,35,3
-9,3,17,36,3
-9,4,12,57,1
-9,4,12,57,1
-9,4,15,8,3
-9,4,15,34,3
-9,4,16,26,3
-9,4,16,26,3
-9,4,18,37,3
-9,4,18,37,3
-9,4,18,37,3
-9,6,11,18,0
-9,6,11,18,0
-9,6,12,54,1
-9,6,12,54,1
-9,6,14,21,2
-9,6,14,21,2
-9,6,19,20,3
-9,7,11,50,0
-9,7,14,17,2
-9,7,14,57,3
-9,7,14,57,3
-9,7,16,56,3
-9,7,16,56,3
-9,7,16,56,3
-9,7,16,56,3
-9,7,18,38,3
-9,7,18,38,3
-9,8,11,4,2
-9,8,11,4,2
-9,8,11,13,0
-9,8,11,13,0
-9,8,11,13,0
-9,8,11,13,0
-9,8,11,13,0
-9,8,11,14,0
-9,8,11,14,1
-9,8,11,14,1
-9,8,12,1,0
-9,8,12,1,0
-9,8,12,1,0
-9,8,12,1,0
-9,8,12,1,0
-9,8,12,1,1
-9,8,12,36,0
-9,8,12,36,0
-9,8,12,36,0
-9,8,12,36,0
-9,8,12,36,0
-9,8,13,37,1
-9,8,13,37,1
-9,8,13,37,1
-9,8,14,20,2
-9,8,14,20,2
-9,8,18,20,3
-9,9,12,47,1
-9,9,12,47,2
-9,9,12,47,2
-9,9,19,5,3
-9,10,13,15,1
-9,10,13,15,1
-9,10,13,15,0
-9,10,16,49,3
-9,10,19,6,3
-9,10,21,5,3
-9,11,14,16,2
-9,11,14,16,2
-9,11,14,16,2
-9,11,18,41,3
-9,12,14,43,2
-9,12,14,43,2
-9,12,14,43,2
-9,12,16,14,3
-9,12,17,12,3
-9,12,17,12,2
-9,12,17,12,3
-9,12,17,12,2
-9,12,20,44,3
-9,13,19,52,3
-9,14,14,39,2
-9,14,14,39,2
-9,14,15,14,3
-9,14,17,29,3
-9,14,17,29,3
-9,14,17,29,3
-9,15,11,41,1
-9,15,11,41,1
-9,15,13,4,1
-9,15,14,3,1
-9,15,14,3,2
-9,16,12,36,1
-9,16,12,36,1
-9,16,12,36,1
-9,16,12,36,1
-9,16,12,48,1
-9,16,12,48,1
-9,16,13,51,1
-9,16,13,51,2
-9,16,13,51,1
-9,16,15,13,3
-9,16,15,14,3
-9,16,15,14,3
-9,17,10,27,0
-9,17,10,27,0
-9,17,11,10,0
-9,17,11,10,0
-9,17,11,10,0
-9,17,12,43,1
-9,17,12,43,1
-9,17,12,43,1
-9,17,13,32,1
-9,17,13,32,1
-9,17,14,5,1
-9,17,14,5,2
-9,17,14,6,2
-9,17,15,7,3
-9,17,15,49,3
-9,17,15,49,3
-9,17,18,12,3
-9,17,18,13,3
+0.2717419,8.698134,4.471172,0.043741,0.515962,0.854318,1.8818425,4.9320555,8.145074,0.2374878,-0.032836914,0.3381958,working
+0.2813187,8.604761,4.55856,0.041658,0.510887,0.857407,1.8818425,4.9320555,8.145074,0.2374878,-0.032836914,0.3381958,working
+0.23822308,8.622718,4.406528,0.03991,0.512086,0.856781,1.8818425,4.9320555,8.145074,0.2374878,-0.032836914,0.3381958,working
+0.11731588,8.619126,4.4783545,0.038642,0.513641,0.855887,2.0590134,5.7125654,6.4547677,0.2374878,-0.032836914,0.3381958,working
+0.24181437,8.669404,4.486734,0.04219,0.515633,0.854455,2.0829554,4.6112323,7.302315,0.30133057,0.005004883,0.3652954,working
+0.19632454,8.66701,4.4556093,0.041381,0.51905,0.852327,0.21547815,-1.0773908,9.294291,0.0087890625,-0.002319336,0.5358887,working
+0.23343466,8.623915,4.4328647,0.042787,0.516075,0.853984,0.7757214,3.490746,9.370906,0.10900879,0.048583984,0.53826904,working
+0.18555063,8.669404,4.437653,0.043233,0.516444,0.853727,1.1109096,2.1978772,9.299079,0.056274414,0.01751709,0.55133057,working
+0.21547815,8.698134,4.4125137,0.043405,0.515751,0.854099,0.36391866,-0.8283938,9.763555,-0.009521484,-0.016784668,0.5675049,working
+0.3890578,8.66701,4.4520183,0.039945,0.519914,0.851807,1.1875241,-1.8243817,7.465121,0.04333496,-0.003479004,0.5588989,working
+0.12808979,8.670602,4.3634324,0.039883,0.521765,0.850612,1.1875241,-1.8243817,7.465121,0.04333496,-0.003479004,0.5588989,working
+0.10654198,8.6574335,4.414908,0.040269,0.516884,0.853285,1.2066777,-1.1444284,9.648633,1.2207031E-4,-0.055358887,0.5834961,working
+0.08140286,8.76637,4.1539397,0.039312,0.527554,0.84693,0.44532153,-2.1452048,9.543288,-0.05847168,-0.039367676,0.52716064,working
+0.17956513,8.698134,4.1814733,0.041489,0.52054,0.850801,0.6368576,-0.6512229,9.998186,0.034851074,-0.028747559,0.53570557,working
+0.02633622,8.651448,4.3873744,0.040486,0.520068,0.850974,1.508347,0.19632454,9.749189,0.08312988,-0.020568848,0.57818604,working
+0.010773907,8.610746,4.4963107,0.047136,0.515427,0.852877,0.9720459,-1.3694834,9.696517,-0.0056152344,-0.049438477,0.5576782,working
+0.21906945,8.929175,3.6032736,0.047929,0.528586,0.845337,1.043872,-0.59855044,10.160992,0.0053100586,-0.024353027,0.52856445,working
+-0.15801731,8.755595,4.423288,0.048114,0.519962,0.849552,1.1923125,-0.08140286,9.849746,0.052856445,-0.003540039,0.5180054,working
+0.05865794,8.665813,4.332308,0.045692,0.518734,0.850569,2.5905263,0.90021986,9.873688,0.12976074,-0.029785156,0.532959,working
+0.06584055,8.605958,4.477157,0.048499,0.515082,0.852584,2.327164,2.0398598,8.001422,0.20056152,0.003479004,0.48242188,working
+0.05865794,8.631097,4.3861775,0.046089,0.516823,0.851908,2.0111294,1.2354081,9.006987,0.16241455,-0.02746582,0.46368408,working
+-0.017956512,8.627506,4.4675803,0.047409,0.513421,0.853688,1.1779473,-0.51235914,9.773131,0.057434082,-0.011291504,0.5081787,working
+-0.18794483,8.659827,4.4783545,0.041528,0.515836,0.852265,0.9959879,0.7469909,9.672575,0.07373047,-0.002319336,0.5019531,working
+-0.027533319,8.591593,4.620809,0.046683,0.510911,0.854784,3.0550013,3.6487634,8.48984,0.25952148,-0.010253906,0.43432617,working
+-0.08140286,8.716091,4.332308,0.042494,0.517638,0.85112,1.3455414,-0.49320555,9.89763,0.034423828,-0.038757324,0.4852295,working
+-0.22146365,8.836999,4.1036615,0.038773,0.531266,0.842643,2.2266076,3.2369606,8.465898,0.26757812,0.02154541,0.43115234,working
+1.0761937,11.745954,2.4648306,0.526819,0.526535,0.468877,-9.270349,-2.4372973,1.0390835,-0.7081909,-0.08135986,0.6744995,walking
+-1.8710686,8.711303,-1.5227122,0.54441,0.510167,0.46156,-9.270349,-2.4372973,1.0390835,-0.7081909,-0.08135986,0.6744995,walking
+-0.63087213,9.64983,-2.3463178,0.218222,0.734833,0.617411,-11.353305,-1.388637,0.16759412,-0.6591797,-0.101745605,0.7449341,walking
+-0.10055647,9.488221,0.008379706,0.520795,-0.531387,-0.481526,-8.963891,-0.51235914,-0.3878607,-0.51483154,-0.0703125,0.83361816,walking
+2.2026656,10.09156,-3.4476504,0.512742,-0.552492,-0.477334,-15.552734,-0.7517793,0.48362875,-0.6300659,-0.072631836,0.772522,walking
+0.09816227,9.627085,-1.8674773,0.54604,-0.514798,-0.454878,-13.747506,-2.2984335,-2.5139117,-0.34100342,-0.17474365,0.42633057,walking
+-0.7781156,8.385692,-3.1112652,0.50674,-0.550405,-0.502163,-10.745177,-2.27928,1.2785037,-0.03930664,-0.30413818,0.26208496,walking
+-0.18674773,9.277532,-1.1683705,0.548857,-0.509167,-0.470289,-9.150639,1.6232687,0.16280572,0.030029297,-0.38269043,0.19390869,walking
+-0.6823475,10.573992,-2.553416,0.679861,-0.341986,-0.292999,-7.52737,-2.1452048,0.9672575,0.3192749,-0.3623047,0.18859863,walking
+-0.2765303,11.451467,-0.30645782,0.563436,0.508963,0.451556,-8.384495,-0.80924016,-0.7134721,0.16137695,-0.67700195,0.019042969,walking
+1.2916719,9.548077,-1.3000516,0.51573,0.538749,0.509015,-7.28795,-1.0630256,0.23463176,0.26348877,-0.6868286,-0.1529541,walking
+0.8379706,10.741586,0.45489833,0.54087,0.51788,0.4762,-9.370906,-0.48362875,1.7286136,0.18725586,-0.7562256,-0.11633301,walking
+0.59495914,9.346964,-1.6639702,0.502446,0.561492,0.502803,-9.605537,-2.5905263,0.05746084,0.13793945,-0.74884033,-0.1798706,walking
+0.93014735,10.562021,-0.16519992,0.523761,0.542328,0.462923,-9.481039,-2.4277205,-0.7230489,0.42114258,-0.3991089,-0.73480225,walking
+0.08738836,9.709685,-1.5191209,0.562041,0.534199,0.433607,-12.689269,-1.6472107,0.34476504,0.7036743,0.074035645,-0.63220215,walking
+0.18076223,9.118318,-1.3084313,0.254447,-0.716063,-0.601747,-8.485051,-2.4133554,-1.3599066,0.15490723,0.4364624,-0.1907959,walking
+-0.18435353,9.961076,-1.3263878,0.261971,-0.708253,-0.606287,-10.0508585,-1.0199299,0.8331822,0.113220215,0.6170654,-0.04260254,walking
+-0.688333,8.623915,-0.7649474,0.467896,-0.599728,-0.506172,-6.7803793,-0.521936,0.2681506,-0.20965576,0.58239746,-0.020568848,walking
+-0.22744916,9.506178,-1.1575965,0.49718,-0.585651,-0.491387,-9.394848,-2.0494366,-0.33997664,-0.18896484,0.69592285,0.20074463,walking
+-1.1348516,10.6877165,-0.9516952,0.519502,-0.571514,-0.466647,-8.714894,-0.7278373,-0.8810662,-0.18896484,0.69592285,0.20074463,walking
+0.8882488,10.172963,-0.6715736,0.52846,-0.55123,-0.467232,-9.56723,-0.80445176,-0.4357447,-0.22363281,0.6533203,0.2144165,walking
+-0.8511387,8.486248,-1.1384429,0.491758,-0.577708,-0.488183,-11.305421,-4.060566,-1.0055647,-0.18109131,0.64508057,0.1262207,walking
+0.023942016,11.11987,1.3946224,0.51358,-0.536144,-0.482607,3.8546648,5.104438,6.799533,0.1015625,-0.27069092,-0.4434204,walking
+-0.5470751,9.082404,-1.6232687,0.42116,-0.616129,-0.547717,-8.441956,-1.6424223,0.320823,-0.20501709,0.6883545,0.33581543,walking
+-1.4808137,9.829395,-4.5178585,0.00118,0.776792,0.629414,-9.768343,-3.2609026,0.272939,-0.20495605,0.69610596,0.3265381,walking
+-1.4257472,9.561244,-0.8643068,0.450442,0.612177,0.47736,-9.768343,-3.2609026,0.272939,-0.20495605,0.69610596,0.3265381,walking
+-1.5466543,11.438298,-2.468422,0.496624,0.573871,0.452744,-9.768343,-3.2609026,0.272939,-0.20495605,0.69610596,0.3265381,walking
+-2.6252422,8.619126,-2.7030537,0.552147,0.5078,0.450302,-8.1881695,-1.2641385,0.038307227,-0.34222412,0.49102783,-0.016540527,walking
+-0.21308395,9.40203,-2.1691468,0.599439,0.476026,0.396271,-6.339846,-1.3503298,-0.033518825,-0.35205078,0.44171143,-0.16430664,walking
+-0.08140286,8.789114,-2.3690627,0.593409,0.464892,0.410283,-8.432379,-4.2999864,1.4700398,-0.24761963,0.57470703,0.45324707,walking
+-0.8559271,9.961076,-0.90021986,0.555447,0.518125,0.43304,-9.509769,-2.006341,-2.1499932,0.13470459,0.65411377,0.0036010742,walking
+-0.2801216,8.352173,-0.33638534,0.558818,0.514925,0.445665,-7.8290396,-3.596091,-0.79008657,0.16339111,0.60461426,-0.7661743,walking
+-0.08738836,9.898827,-1.9524715,0.508351,0.559775,0.486663,-10.352529,-2.0590134,0.22505496,0.59747314,0.28381348,-0.71154785,walking
+2.1930888,7.1550717,-3.1411927,0.192016,0.739159,0.626426,-8.556877,-1.412579,0.78529817,0.6008911,0.26306152,-0.72491455,walking
+-0.92895025,11.055226,-0.23822308,0.493986,-0.554274,-0.504623,-13.939042,-2.0590134,1.3934253,0.64434814,0.144104,-0.7451172,walking
+0.21188685,8.973468,-1.0235212,0.550447,-0.505433,-0.448153,-13.024457,-2.873042,1.1875241,0.5584717,0.3137207,-0.7282715,walking
+-0.24779987,12.925097,-3.788824,0.53726,-0.52702,-0.453356,-11.741165,-2.5570073,1.3982137,0.6694946,0.21734619,-0.6765747,walking
+-2.1547816,13.4183035,-6.009446,0.323083,-0.661886,-0.619246,-8.001422,-2.4995465,1.6376339,0.4973755,0.46984863,-0.6560669,walking
+-1.2593501,8.961497,-1.7465701,0.196693,-0.740158,-0.62706,-12.808979,-2.5761611,0.10055647,0.5979004,0.381958,-0.6482544,walking
+-0.1328782,9.147048,-2.9053638,0.022181,0.777414,0.627034,-7.6710224,-1.5753847,-0.320823,0.4567871,0.2935791,-0.8391113,walking
+0.7338228,9.568427,-6.634333,0.393491,0.730379,0.484185,-11.674128,0.17238252,1.7142484,0.7868042,0.18414307,-0.5524292,walking
+-1.9716251,8.117541,-4.0761285,0.469076,0.718339,0.409424,-11.674128,0.17238252,1.7142484,0.7868042,0.18414307,-0.5524292,walking
+0.32561144,9.016563,3.6092591,-0.018518,-0.561261,-0.827409,-12.650962,-2.0111294,0.5746084,0.78063965,0.17840576,-0.39233398,walking
+0.090979666,9.075222,3.503914,0.010144,0.564181,0.825586,-8.2169,-0.18195933,0.24899697,0.74591064,0.1239624,-0.62054443,walking
+0.19991584,9.054871,3.7086184,-0.012561,-0.560571,-0.82801,-9.385271,-4.0462008,-1.5562311,0.256958,0.36480713,-0.27624512,walking
+0.21667525,9.060856,3.6415808,0.012755,0.558465,0.829429,-9.710882,-0.7757214,3.6870706,0.14190674,0.45703125,-0.21124268,walking
+0.22744916,9.060856,3.645172,0.012841,0.558664,0.829293,-10.529699,-3.1316159,-0.272939,-0.29626465,0.49450684,0.17242432,walking
+0.19512744,9.060856,3.6140475,0.01255,0.557529,0.830062,-9.509769,-0.8283938,0.9959879,-0.1918335,0.40795898,-0.080078125,walking
+0.1328782,9.076419,3.5685577,-0.010446,-0.561843,-0.827177,-9.572019,-2.4947581,-1.6136919,0.13330078,0.41436768,-0.2218628,walking
+-1.5095441,11.198878,-1.8387469,0.261779,-0.680799,-0.637011,-1.958457,-0.10055647,4.4675803,-0.04296875,-0.19110107,-0.9154053,dancing
+-0.05267244,-5.6156,2.4037786,0.352709,-0.731645,-0.528224,18.703505,12.378023,14.5088625,-0.5602417,-0.23596191,-0.7937622,dancing
+0.07062895,-1.5753847,-0.81761986,0.339088,-0.677723,-0.589453,18.703505,12.378023,14.5088625,-0.5602417,-0.23596191,-0.7937622,dancing
+2.2732944,3.4225113,-2.6755204,0.118016,0.877354,0.45141,-12.794614,11.975797,11.530476,-0.47833252,-0.43554688,-0.7303467,dancing
+-4.5561657,13.062764,-2.8646624,0.381358,-0.792455,-0.433683,-12.794614,11.975797,11.530476,-0.371521,-0.3826294,-0.53393555,dancing
+4.5980644,-4.882974,2.19668,0.276273,-0.733631,-0.604661,-12.794614,11.975797,11.530476,-0.371521,-0.3826294,-0.53393555,dancing
+-1.8016368,11.6442,-5.7664347,0.219061,-0.663912,-0.707763,-1.8626889,-9.198523,-16.357185,-0.7172241,-0.3291626,-0.37512207,dancing
+-1.7992426,27.91759,-1.6220716,-0.082716,0.809359,0.578657,-3.1411927,-0.93373865,-0.31124622,-0.35992432,0.33746338,-0.79608154,dancing
+0.5793968,1.2126632,-4.6244006,-0.030779,0.801127,0.590978,-3.1411927,-0.93373865,-0.31124622,-0.35992432,0.33746338,-0.79608154,dancing
+0.48123455,35.582626,-8.6299,0.514118,0.515082,0.556824,1.2880806,3.8355112,2.3894134,-0.4446411,-0.15338135,-0.85528564,dancing
+3.2692823,-1.8004397,-0.7769185,0.514916,0.374323,0.534814,-2.9400797,-4.3047748,-3.7732618,-0.40649414,-0.029296875,-0.8713379,dancing
+2.4863784,-4.0258503,0.1352724,0.543841,-0.486144,-0.546646,-12.861651,-5.33907,-3.265691,-0.34906006,0.54486084,-0.69177246,dancing
+0.39145198,8.514978,-7.3430166,0.520221,-0.546999,-0.566261,-10.213664,-8.327033,1.3072342,-0.07220459,0.12145996,-0.6904297,dancing
+-4.309563,26.964697,-0.6811504,0.555781,-0.51674,-0.545712,-7.431602,3.940856,14.346057,-0.18426514,0.19262695,-0.8668823,dancing
+-5.368997,26.76957,-7.6746135,0.573843,-0.547145,-0.523433,-12.871228,-8.714894,10.793061,-0.087768555,0.31750488,-0.8586426,dancing
+-3.2513258,10.072407,-9.166202,0.561235,-0.526834,-0.535287,-7.393295,-1.9249382,-6.129156,-0.55218506,0.30267334,-0.60998535,dancing
+-1.0989386,8.825027,-1.2078748,0.494579,-0.582964,-0.569548,-7.393295,-1.9249382,-6.129156,-0.55218506,0.30267334,-0.60998535,dancing
+-1.4999673,9.7803135,-5.5521536,0.461249,-0.606122,-0.597372,-7.393295,-1.9249382,-6.129156,-0.55218506,0.30267334,-0.60998535,dancing
+-4.3993454,13.245921,-4.8722005,0.505116,-0.582591,-0.566936,-8.111555,-4.3718123,-3.0789435,-0.10809326,0.3184204,-0.6734009,dancing
+-2.7748797,12.2080345,-7.835025,0.412957,-0.585669,-0.636403,-8.111555,-4.3718123,-3.0789435,-0.10809326,0.3184204,-0.6734009,dancing
+-0.9995792,16.71871,-6.7013707,0.363318,-0.656258,-0.61907,-8.111555,-4.3718123,-3.0789435,-0.10809326,0.3184204,-0.6734009,dancing
+-6.169858,26.574442,-2.6120741,0.446443,0.638707,0.565161,-25.617958,-7.728483,6.229713,-0.18395996,0.6801758,0.0079956055,dancing
+3.4823663,-2.4756045,-2.802413,0.631561,0.453375,0.3784,5.9807158,-0.56982,6.612785,-0.5132446,0.11016846,-0.84606934,dancing
+0.19632454,-0.35913026,1.483208,0.637244,0.476061,0.351114,-2.7341783,1.8435353,-4.3526587,-0.50219727,0.082214355,-0.8566284,dancing
+3.6008794,5.6778493,-4.009091,0.637278,0.483459,0.382699,-13.038822,-9.873688,3.86903,-0.30413818,0.54803467,-0.48510742,dancing
+2.6862943,2.0003555,-2.4121583,0.420848,-0.549301,-0.628842,5.559336,-8.508993,7.0581064,0.47381592,0.25909424,-0.46484375,dancing
+-0.12449849,25.859772,-6.409278,0.444236,0.699106,0.454563,-8.408437,-7.28795,-3.0933087,0.8930054,0.19561768,-0.31585693,dancing
+1.4915876,3.345897,3.9971197,0.471195,0.545347,0.476621,-8.408437,-7.28795,-3.0933087,0.8930054,0.19561768,-0.31585693,dancing
+-6.293159,17.597382,-3.558981,0.51224,0.55481,0.428982,-5.2241483,-10.91756,-4.7884035,0.8930054,0.19561768,-0.31585693,dancing
+-0.9816227,8.230068,-5.3127337,0.362911,-0.699678,-0.583309,-17.152061,-12.521675,1.9201498,0.5169678,-0.24389648,-0.71276855,dancing
+1.5526398,8.35337,-1.8387469,0.421293,-0.607088,-0.605932,-6.4978633,8.327033,3.86903,0.9624634,-0.013122559,-0.2140503,dancing
+2.8167782,9.326612,-3.752911,0.216582,0.808251,0.528818,-11.228806,-10.730812,-6.2967505,0.8629761,-0.12542725,-0.012512207,dancing
+-3.5003228,9.1255,0.077811554,0.340029,0.607215,0.516562,-1.661576,5.559336,9.792285,0.6323242,0.07775879,-0.52948,dancing
+-6.82946,7.5082164,3.2094274,0.311356,0.579539,0.380038,-12.976573,-3.0597897,-3.596091,0.7932739,-0.4605713,0.19799805,dancing
+-6.5565214,5.717354,5.6658783,0.185591,0.464146,0.413321,-20.580557,3.8498764,-0.4261679,0.7647095,-0.4713745,0.23999023,dancing
+-0.093373865,5.5102553,6.8689647,0.253226,0.141213,0.429836,-22.682667,-7.1059904,-6.631939,0.83862305,-0.53723145,-0.048095703,dancing
+-0.02873042,5.6898203,7.9870567,0.261946,0.140491,0.440384,-14.781801,4.036624,3.1603463,0.82159424,-0.46600342,-0.3283081,dancing
+0.9911995,5.329493,7.752425,0.259802,0.132426,0.445474,-9.816227,8.015787,-11.880029,0.41210938,0.028564453,-0.8978882,dancing
+0.9911995,5.329493,7.752425,0.259802,0.132426,0.445474,35.975273,-13.852851,-0.81881696,0.15344238,0.34429932,-0.8980713,dancing
+1.8866309,5.0721164,7.60997,0.258374,0.13855,0.457876,-4.343082,6.9623384,-5.425261,0.5442505,-0.30700684,-0.7702637,dancing
+1.8866309,5.0721164,7.60997,0.258374,0.13855,0.457876,-4.43885,-6.0285997,-7.4842744,0.62213135,-0.49639893,-0.57073975,dancing
+1.8866309,5.0721164,7.60997,0.258374,0.13855,0.457876,-2.858677,-5.7987566,-6.8091097,-0.5181885,-0.24584961,-0.33776855,dancing
+1.2940661,5.0960584,7.704541,0.252565,0.146955,0.465843,-10.146626,-0.56982,1.8195933,-0.29083252,-0.015625,-0.39385986,dancing
+1.2940661,5.0960584,7.704541,0.252565,0.146955,0.465843,-14.130578,-14.020445,5.544971,0.028686523,0.005493164,-0.94610596,dancing
+1.2940661,5.0960584,7.704541,0.252565,0.146955,0.465843,-0.62728083,-1.0390835,-0.6464345,0.01763916,-0.029052734,-0.96429443,dancing
+-0.62129533,5.445612,8.038532,0.246227,0.138322,0.452051,0.5554548,1.5275006,-4.2185836,-0.27026367,-0.5075073,-0.7207031,dancing
+-0.62129533,5.445612,8.038532,0.246227,0.138322,0.452051,-10.429143,-2.0685902,-4.7788267,-0.1798706,-0.34783936,-0.91845703,dancing
+-0.62129533,5.445612,8.038532,0.246227,0.138322,0.452051,-34.993652,-0.6607997,-3.3566709,0.14996338,0.07019043,-0.5793457,dancing
+-1.2545617,2.8526914,9.387665,0.200543,0.135893,0.410051,-9.988609,-5.473145,0.2633622,-0.07659912,0.23321533,-0.5091553,dancing
+-1.2545617,2.8526914,9.387665,0.200543,0.135893,0.410051,-37.52193,11.377247,0.0,-0.5796509,0.2685547,-0.3302002,dancing
+-5.3486466,4.1635165,10.986992,0.177058,0.151285,0.376394,-26.522966,11.042058,6.775591,0.3161621,-0.24066162,-0.6817627,dancing
+-1.3850456,4.0773253,9.271546,0.181064,0.078282,0.317588,-7.153875,-4.6782703,-3.3279405,-0.6854248,-0.4020996,-0.6055298,dancing
+0.19871874,2.9364884,9.163807,0.182012,0.063067,0.334532,-7.153875,-4.6782703,-3.3279405,-0.6854248,-0.4020996,-0.6055298,dancing
+-0.45609543,3.3566709,8.334216,0.185752,0.072793,0.364497,7.4268136,-4.3957543,-0.2825158,-0.49023438,-0.60131836,-0.59381104,dancing
+-0.82480246,4.06296,9.226056,0.163756,0.171797,0.438793,-23.266851,-6.7947445,-24.181437,-0.19897461,-0.46099854,-0.64434814,dancing
+-0.7733272,3.810372,8.857349,0.150553,0.173511,0.465805,-23.266851,-6.7947445,-24.181437,0.10510254,-0.565979,-0.81585693,dancing
+-1.3467385,4.226963,8.487445,0.144853,0.167943,0.469881,-12.722788,-11.554418,-6.4499793,-0.34527588,-0.11248779,-0.9309082,dancing
+-1.2916719,3.9552212,8.185776,0.129444,0.189504,0.47238,-12.722788,-11.554418,-6.4499793,-0.34527588,-0.11248779,-0.9309082,dancing
+-2.1428106,1.1192893,8.376115,0.081862,0.190805,0.454552,-7.517793,-6.2249246,-12.588713,-0.43927002,-0.20568848,-0.8723755,dancing
+-0.545878,2.268506,8.230068,0.064164,0.196495,0.435339,-16.213533,-18.239029,29.783869,0.4555664,-0.20837402,-0.8644409,dancing
+-0.545878,1.7525556,6.8557963,0.108653,0.169757,0.457975,-16.213533,-18.239029,29.783869,0.4555664,-0.20837402,-0.8644409,dancing
+-1.0031705,1.6496049,9.600749,0.164427,0.091194,0.481398,-4.783615,-2.2649148,-5.7843914,-0.09460449,-0.28289795,-0.9168701,dancing
+0.58298814,2.610877,9.801862,0.177686,0.056519,0.443821,-16.146496,-38.264133,21.619642,0.28320312,-0.12322998,-0.92407227,dancing
+0.7769185,2.5558102,9.7084875,0.177548,0.021465,0.421464,-12.976573,-2.2361844,-12.0093155,0.24395752,-0.09832764,-0.9067383,dancing
+0.61411273,2.8203697,8.512584,0.175761,-0.006402,0.396688,-10.658986,-23.669079,12.938266,0.8140869,-0.20648193,-0.49694824,dancing
+0.7015011,3.028665,8.292317,0.193947,-0.012867,0.351924,-19.780895,-32.307358,25.005043,0.87231445,-0.18859863,-0.38006592,dancing
+1.6591818,3.040636,9.016563,0.183839,-0.017427,0.343706,-5.2145715,1.3455414,1.7286136,0.74017334,0.33502197,-0.05407715,dancing
+1.7705121,3.335123,9.296685,0.17411,-0.021688,0.338191,-19.9437,-57.436897,13.22557,0.94873047,0.014221191,-0.25457764,dancing
+0.9959879,3.321955,9.203311,0.169907,-0.021603,0.328727,-23.841461,-51.566315,18.727446,0.9489746,0.04437256,-0.17047119,dancing
+1.7908629,3.2860417,9.175778,0.162457,-0.019116,0.328205,-3.1364043,1.7669208,1.1444284,0.7150879,0.40179443,-0.17193604,dancing
+2.0590134,2.219425,8.789114,0.154137,-0.02028,0.338588,-3.7972038,-0.9911995,-0.37349546,0.65319824,0.4500122,-0.2597046,dancing
+0.8834604,3.1136594,9.155427,0.136216,-0.019107,0.313152,-2.2984335,-5.6551046,-9.524135,0.5107422,0.5120239,-0.46636963,dancing
+1.0163386,1.8854338,9.555259,0.120914,-0.030812,0.298579,-9.691729,-5.554548,1.1013328,0.91864014,-0.030639648,-0.012817383,dancing
+1.0079589,1.8100165,9.533711,0.108573,-0.041892,0.286177,-8.992621,-5.602432,2.6862943,0.92559814,-0.26239014,0.014038086,dancing
+1.0079589,1.8100165,9.533711,0.108573,-0.041892,0.286177,-1.0295067,-0.34955344,1.1971009,0.6725464,0.17822266,-0.704895,dancing
+2.078167,1.0642227,9.43914,0.085724,-0.074001,0.251005,9.251195,8.858546,-6.493075,0.43548584,0.62939453,-0.42596436,dancing
+1.7956513,1.4999673,9.661801,0.085047,-0.07941,0.249626,5.9807158,34.648888,20.09214,0.48736572,0.45159912,-0.29840088,dancing
+1.8686744,1.7956513,9.903615,0.095007,-0.076599,0.250747,-0.866701,13.9438305,13.512875,0.51031494,0.40283203,-0.38781738,dancing
+1.8686744,1.7956513,9.903615,0.095007,-0.076599,0.250747,7.029376,38.16836,8.255207,0.237854,0.40441895,-0.4666748,dancing
+1.4401124,1.9476831,8.74123,0.11099,-0.061563,0.259082,7.029376,38.16836,8.255207,0.237854,0.40441895,-0.4666748,dancing
+1.4401124,1.9476831,8.74123,0.11099,-0.061563,0.259082,-8.350976,25.033773,8.178593,0.13439941,-0.10437012,-0.6239624,dancing
+1.4401124,1.9476831,8.74123,0.11099,-0.061563,0.259082,-26.072857,-32.71437,26.508602,0.095703125,-0.4041748,-0.8901367,dancing
+1.9632454,2.018312,8.313866,0.127513,-0.038076,0.259911,-23.611618,-39.442078,9.32781,-0.39178467,-0.1159668,-0.7161865,dancing
+1.9632454,2.018312,8.313866,0.127513,-0.038076,0.259911,5.085284,-2.5713725,-2.0254946,-0.26672363,-0.5751343,-0.7036743,dancing
+0.60932434,3.0681696,9.052477,0.131991,-0.040674,0.246552,5.085284,-2.5713725,-2.0254946,-0.26672363,-0.5751343,-0.7036743,dancing
+0.60932434,3.0681696,9.052477,0.131991,-0.040674,0.246552,20.03468,24.880545,20.781672,-0.01727295,-0.61883545,-0.5725708,dancing
+0.60932434,3.0681696,9.052477,0.131991,-0.040674,0.246552,-30.391996,-23.621195,-8.815451,-0.819397,-0.37023926,-0.4265747,dancing
+1.2485762,2.5833437,10.242394,0.133648,-0.039705,0.240514,9.193734,17.228676,13.867216,-0.18328857,-0.8397827,-0.44335938,dancing
+0.5279215,3.6966474,8.180987,0.131563,-0.038393,0.260185,-18.928558,0.9816227,5.1235914,-0.37872314,-0.8082886,-0.45074463,dancing
+-0.18435353,2.6312277,10.752359,0.129343,-0.058427,0.246766,45.80108,30.669724,5.133168,0.066223145,0.19677734,-0.58691406,dancing
+0.36750996,4.045004,7.961918,0.157725,-0.01845,0.269816,45.844173,29.257145,1.8291701,0.068725586,0.21868896,-0.59124756,dancing
+0.89303726,4.1742907,7.603985,0.205324,0.023198,0.278158,45.844173,29.257145,1.8291701,0.068725586,0.21868896,-0.59124756,dancing
+0.019153614,5.0374002,8.525752,0.219525,-0.022294,0.221374,32.407913,17.774553,0.2873042,0.125,0.24633789,-0.6143799,dancing
+-0.4321534,5.793968,7.854179,0.229523,-0.022137,0.194461,-23.54458,-8.623915,-1.9488802,0.27172852,-0.0010375977,-0.82891846,dancing
+-1.6292542,6.754043,9.066842,0.263673,0.048986,0.172589,-15.016433,-1.8914193,3.739743,0.65216064,0.24005127,-0.44763184,dancing
+-0.49081135,6.030994,9.817424,0.268913,0.07796,0.179818,24.837448,30.837318,16.112978,0.5783081,0.38201904,-0.30615234,dancing
+-0.08619126,6.1100025,6.56131,0.310198,0.037761,0.16616,-15.275007,-3.122039,10.601525,0.023925781,-0.6676636,-0.72424316,dancing
+-0.6847417,6.6079965,6.578069,0.332459,0.024177,0.126753,-32.752678,-1.6807296,-7.240066,-0.11669922,-0.29608154,-0.92437744,dancing
+-0.89543146,7.0724716,7.289147,0.337729,0.014951,0.078682,22.060175,6.6606693,-5.391742,-0.2277832,-0.43133545,-0.788147,dancing
+-0.5506664,6.6427126,6.7947445,0.340486,0.011528,0.070576,0.5315128,3.3087866,12.061988,0.1798706,-0.7470093,-0.63500977,dancing
+-0.037110128,6.4739213,6.2644286,0.353686,0.004541,0.061581,1.0151415,1.2737153,8.805874,0.074279785,-0.78570557,-0.5996704,dancing
+-0.6871359,6.7348895,6.752846,0.355992,0.006114,0.028282,0.9864111,-0.4357447,7.675811,-0.029907227,0.05633545,-0.97631836,dancing
+0.7781156,0.62608373,13.4422455,0.109537,-0.017382,0.502022,7.422025,5.7508726,-0.4357447,0.4711914,0.31848145,-0.57958984,lying
+1.067814,1.0450691,9.329007,0.069728,-0.027419,0.479298,3.1794999,-4.5298295,2.336741,0.93481445,0.28710938,-0.050476074,lying
+1.0295067,0.93732995,9.343372,0.069772,-0.027098,0.478409,-0.63206923,-10.333375,0.6607997,0.8916626,0.05255127,0.02935791,lying
+1.0905589,0.89423436,9.528923,0.068825,-0.027936,0.478198,-0.8714894,-10.299856,1.0965444,0.6711426,0.023498535,-0.107910156,lying
+-0.034715924,0.8750807,9.471462,0.050216,-0.022737,0.47624,2.303222,-10.812215,0.8283938,0.6668091,0.022766113,-0.10839844,lying
+0.92775315,0.82360536,9.508572,0.100342,-0.034871,0.493959,7.551312,-8.355764,7.1059904,0.5140381,0.25543213,0.29107666,lying
+1.2150574,1.0666169,9.757569,0.079846,-0.02702,0.486489,7.1873937,-2.1691468,2.6479871,0.5656128,0.23803711,0.42132568,lying
+1.270124,1.2413936,9.423578,0.085681,-0.033578,0.482435,7.3549876,-10.132261,-3.572149,0.71087646,0.12390137,0.34332275,lying
+1.2354081,1.1647792,9.36492,0.085307,-0.034933,0.482168,5.3007627,-7.0245876,4.0174704,0.5527344,0.15118408,0.33569336,lying
+1.7525556,2.005144,6.588843,0.082507,-0.001699,0.511765,4.232949,-7.5225816,-2.9161377,0.67077637,0.40789795,0.21044922,lying
+1.922544,1.2425907,8.761581,0.066092,-0.016159,0.517305,4.232949,-7.5225816,-2.9161377,0.67077637,0.40789795,0.21044922,lying
+0.3172317,-0.41060558,10.044873,0.033376,-0.008348,0.513688,9.457097,-10.299856,-5.3725886,0.67077637,0.40789795,0.21044922,lying
+-13.785813,-1.9165585,7.9930425,-0.248631,0.355075,0.407095,9.457097,-10.299856,-5.3725886,0.6039429,0.4309082,0.3334961,lying
+-5.4061074,-0.47046062,8.224083,-0.137367,0.24702,0.442219,6.114791,-10.481815,-3.371036,0.6013794,0.335083,0.20037842,lying
+-5.3881507,0.25378537,7.69257,-0.122974,0.247411,0.439031,4.9224787,-10.601525,-4.927267,0.7946167,0.35272217,0.16192627,lying
+-2.2158337,-1.5490485,8.249222,-0.039781,-0.0025,0.49737,2.777274,-2.4756045,-0.7422025,0.48950195,0.41723633,0.2475586,lying
+0.89303726,1.6603789,11.309011,0.043675,0.021625,0.501122,12.181698,-3.7588966,2.3319526,0.41363525,0.42785645,0.15966797,lying
+4.092888,0.6548142,11.572374,0.148896,-0.06608,0.423493,3.6535518,-9.174581,0.5410896,0.56378174,0.13085938,0.08392334,lying
+4.9524064,2.9053638,6.775591,0.157319,-0.08853,0.485426,-2.72939,0.1436521,9.14585,0.115478516,-0.1104126,0.04650879,lying
+1.3611037,0.36511576,10.160992,0.109675,-0.119889,0.537302,-0.08619126,-4.8602295,7.5082164,0.2835083,-0.10949707,0.026611328,lying
+2.542642,0.48123455,8.775947,0.090738,-0.064833,0.538508,-0.08619126,-4.8602295,7.5082164,0.2835083,-0.10949707,0.026611328,lying
+1.2354081,0.8331822,9.369708,0.062437,-0.030422,0.540841,-1.0390835,-6.1387334,7.335834,0.31292725,-0.050720215,0.061523438,lying
+1.0007763,0.8702923,9.41041,0.061722,-0.018469,0.540189,0.8619126,-6.4068837,7.651869,0.3065796,-0.026733398,0.085876465,lying
+0.9828198,0.91578215,9.32781,0.062559,-0.016057,0.539085,0.20111294,-5.78918,8.279149,0.272583,-0.02557373,0.08099365,lying
+0.90381116,0.6631939,9.522937,0.055965,-0.027886,0.536139,4.7979803,-7.6135616,-7.8912888,0.7335205,0.4847412,0.1340332,lying
+0.8319851,0.81881696,9.482236,0.052538,-0.025674,0.535042,4.7979803,-7.6135616,-7.8912888,0.7335205,0.4847412,0.1340332,lying
+1.1707647,0.78769237,9.234436,0.057437,-0.030304,0.535808,5.386954,-8.183381,7.2592196,0.39520264,0.2668457,-0.05029297,lying
+0.6332663,0.7541735,9.598354,0.056614,-0.028472,0.536826,5.386954,-8.183381,7.2592196,0.39520264,0.2668457,-0.05029297,lying
+0.8583213,0.58777654,9.500193,0.049152,-0.024994,0.538068,2.5187001,-0.8475474,8.42759,0.24157715,0.23150635,0.036376953,lying
+0.8858546,0.60573304,9.479841,0.049036,-0.024114,0.53807,5.707777,-8.652645,7.651869,0.3416748,0.26013184,0.0068359375,lying
+0.8595184,0.6572084,9.441534,0.053508,-0.021819,0.538046,5.080496,-7.192182,5.2959743,0.38079834,0.28118896,0.014709473,lying
+0.81163436,0.63087213,9.417592,0.049244,-0.020966,0.538258,5.171476,-7.345411,5.0613422,0.39465332,0.28356934,0.016540527,lying
+0.80445176,0.676362,9.507375,0.052132,-0.025991,0.537735,5.171476,-7.345411,5.0613422,0.39465332,0.28356934,0.016540527,lying
+3.705027,6.211756,6.081272,0.356814,0.06642,0.569911,-0.92416185,-2.384625,8.930372,0.019104004,-0.083984375,0.032104492,lying
+-1.7429788,9.594764,-3.9264908,0.599053,0.489213,0.356771,-1.6376339,-0.521936,9.011775,-0.09851074,-0.09906006,0.01361084,lying
+1.804031,6.775591,6.495469,0.358314,0.125564,0.496893,3.98874,4.213795,7.2113357,-0.4078369,0.07171631,-0.27856445,getting up
+0.7565677,7.321469,5.853823,0.385424,0.166314,0.485998,3.98874,4.213795,7.2113357,-0.4078369,0.07171631,-0.27856445,getting up
+-0.51116204,11.372458,-1.721431,0.551661,0.315508,0.400456,-1.1779473,-12.981361,-1.2737153,-0.008178711,0.651001,-0.75683594,getting up
+-0.044292733,10.01734,-2.3319526,0.60771,0.386845,0.366552,-1.1779473,-12.981361,-1.2737153,-0.008178711,0.651001,-0.75683594,getting up
+0.047884032,8.288726,-5.097255,0.667071,0.518986,0.325706,-3.53863,-9.212888,-1.733402,0.11566162,0.6757202,-0.7201538,getting up
+0.78170687,7.4375877,-7.711724,0.729606,0.524644,0.281481,-3.145981,-9.653421,-1.0965444,0.10369873,0.6723633,-0.72540283,getting up
+0.7314286,7.952341,-6.0800753,0.724444,0.514214,0.306981,-3.0550013,-9.308656,-0.047884032,0.10662842,0.6362915,-0.7576904,getting up
+1.0642227,7.839813,-6.0585275,0.719183,0.510162,0.315935,-2.5474305,-8.580819,1.4460979,0.10662842,0.6362915,-0.7576904,getting up
+1.1563994,9.003395,-4.086902,0.679054,0.488935,0.36551,-5.329493,-8.010999,1.3072342,0.25878906,0.5993042,-0.74658203,getting up
+0.8678981,9.075222,-4.358644,0.679095,0.478453,0.368605,-6.373365,-9.217676,-0.641646,0.34362793,0.61724854,-0.6595459,getting up
+-2.4013844,9.002198,1.472434,0.471214,0.442282,0.390479,-2.6862943,-0.79487497,9.212888,0.1642456,-0.03149414,-0.97473145,getting up
+-1.9596541,7.3849154,5.662287,0.318185,0.351412,0.431604,-2.6862943,-0.79487497,9.212888,0.1642456,-0.03149414,-0.97473145,getting up
+-2.5067291,5.7748146,6.3793507,0.250726,0.297848,0.445006,-2.6862943,-0.79487497,9.212888,0.1642456,-0.03149414,-0.97473145,getting up
+-2.6048915,4.1706996,7.156269,0.175619,0.239031,0.455325,-2.8921957,-1.3838485,8.954314,0.16912842,-0.022399902,-0.97161865,getting up
+0.45250413,1.0618285,9.482236,0.053052,0.00286,0.452231,-2.9017725,-1.1971009,9.222465,0.16912842,-0.022399902,-0.97161865,getting up
+-3.9755719,2.445677,9.829395,0.087005,0.11265,0.448801,5.803545,7.3645644,-2.0638018,0.168396,-0.022338867,-0.97283936,getting up
+-0.80924016,8.744822,4.5801077,0.408321,0.294136,0.43778,-4.453215,4.960786,12.354081,0.12347412,0.13775635,-0.7609863,getting up
+-0.2837129,9.783905,-1.5370775,0.612064,0.41741,0.367859,-7.9152308,-8.145074,4.3861775,0.029846191,0.517395,-0.6730957,getting up
+-0.5303157,9.660604,-2.7928362,0.650772,0.436042,0.332186,-4.2281604,-7.627927,5.985504,-0.20056152,0.18762207,-0.91448975,getting up
+-0.39743748,9.652225,-2.8491,0.664107,0.438354,0.320754,-4.501099,-3.083732,7.6375036,0.20495605,0.15795898,-0.8401489,getting up
+0.7015011,1.0821792,9.532514,0.069863,-0.014044,0.437128,7.9487495,5.315128,1.2210429,-0.3390503,-0.5656738,-0.69989014,getting up
+0.7529764,1.0666169,9.522937,0.06915,-0.014728,0.43757,7.9487495,5.315128,1.2210429,-0.3390503,-0.5656738,-0.69989014,getting up
+0.7410054,1.009156,9.451111,0.066262,-0.016157,0.437731,7.9487495,5.315128,1.2210429,-0.3390503,-0.5656738,-0.69989014,getting up
+0.7098808,0.9576807,9.455899,0.064499,-0.017663,0.438077,7.9487495,5.315128,1.2210429,-0.3390503,-0.5656738,-0.69989014,getting up
+0.5303157,1.0199299,9.560047,0.05964,-0.007167,0.445017,7.9487495,5.315128,1.2210429,-0.3390503,-0.5656738,-0.69989014,getting up
+0.34835634,1.0175357,9.540894,0.058427,-0.005304,0.452726,7.9487495,5.315128,1.2210429,-0.3390503,-0.5656738,-0.69989014,getting up
+0.36990416,1.4556746,9.358934,0.068614,9.66E-4,0.45346,7.9487495,5.315128,1.2210429,-0.3390503,-0.5656738,-0.69989014,getting up
+-3.9025488,2.3906105,9.835381,0.101116,0.100239,0.436387,6.133945,7.4603324,-3.016694,-0.36853027,-0.63287354,-0.65545654,getting up
+-3.429694,4.3658266,7.8745294,0.185402,0.204235,0.42461,6.133945,7.4603324,-3.016694,-0.36853027,-0.63287354,-0.65545654,getting up
+-1.4915876,8.674192,3.9240966,0.436043,0.334635,0.423488,4.6351743,2.801216,8.925584,-0.08874512,-0.20245361,-0.798584,getting up
+-0.5590461,9.657013,-3.466804,0.654102,0.438002,0.32678,1.7190368,2.2984335,11.48738,-0.023803711,-0.11303711,-0.7922363,getting up
+-0.33159694,9.408015,-3.0083144,0.660632,0.438496,0.323987,2.906561,3.3806129,0.33997664,-0.20080566,0.13085938,-0.74224854,getting up
+-0.6536171,9.713276,-2.019509,0.63986,0.431322,0.337232,2.906561,3.3806129,0.33997664,-0.20080566,0.13085938,-0.74224854,getting up
+-0.45729253,9.628283,-1.7154455,0.625291,0.423314,0.346692,-1.9440918,-6.301539,4.903325,-0.27905273,0.54156494,-0.5644531,getting up
+-0.80325466,9.676167,-2.147599,0.638433,0.440608,0.326434,-3.3135753,-11.650186,2.767697,-0.23632812,0.56103516,-0.60369873,getting up
+-3.4584243,5.5629277,-11.432313,0.745335,0.555948,0.158843,-0.0047884034,-0.61291564,8.322245,0.028930664,0.048828125,-0.90875244,getting up
+-0.60214174,8.731653,-8.986636,0.759024,0.528473,0.211023,6.4739213,-7.015011,4.381389,-0.38146973,0.55023193,-0.72198486,getting up
+-0.049081136,6.603208,-4.7500963,0.72917,0.473651,0.244622,3.739743,-5.8945246,4.2904096,-0.25476074,0.4000244,-0.8187866,getting up
+-1.0139444,9.616311,-1.3455414,0.607241,0.431619,0.333201,-7.9583263,-5.032612,4.429273,-0.119628906,0.545105,-0.7716675,getting up
+-1.3491327,9.82341,0.17118542,0.58999,0.368623,0.30736,1.685518,-2.1308396,8.585608,-0.038757324,0.05456543,-0.86224365,getting up
+-0.08140286,9.385271,-1.4616601,0.587527,0.42082,0.374104,-3.8402996,-7.302315,12.708423,-0.038757324,0.05456543,-0.86224365,getting up
+-1.2988545,10.250774,-1.210269,0.163023,0.730719,0.622134,2.2601264,-0.7517793,8.925584,-0.019226074,0.094055176,-0.84399414,getting up
+-0.35553896,9.932345,-2.2984335,-0.051033,0.758208,0.649904,2.2601264,-0.7517793,8.925584,-0.06555176,-0.16235352,-0.87646484,getting up
+0.05865794,9.607931,-1.271321,0.13732,-0.719487,-0.673311,2.8778305,2.8682537,8.465898,-0.018066406,-0.31695557,-0.8586426,getting up
+-1.4891934,9.762358,-1.8303672,0.207792,-0.719784,-0.65417,3.3518825,3.2944214,8.66701,-0.045776367,-0.32348633,-0.86376953,getting up
+-1.3144168,9.7563715,-1.3431472,0.206839,-0.717338,-0.655592,3.3518825,3.2944214,8.66701,-0.045776367,-0.32348633,-0.86376953,getting up
+-1.2401965,9.7803135,-1.292869,0.21009,-0.716625,-0.654731,-9.409213,-2.4851813,-0.48362875,-0.63067627,0.35913086,0.52178955,getting up
+-1.2162545,9.840169,-1.2425907,0.210742,-0.71313,-0.657956,-9.409213,-2.4851813,-0.48362875,-0.63067627,0.35913086,0.52178955,getting up
+-1.2378023,9.872491,-1.1935096,0.211178,-0.709722,-0.661237,-9.409213,-2.4851813,-0.48362875,-0.63067627,0.35913086,0.52178955,getting up
+-1.198298,9.781511,-1.0151415,0.211256,-0.708644,-0.662221,-9.409213,-2.4851813,-0.48362875,-0.63067627,0.35913086,0.52178955,getting up
+-1.1911154,9.720459,-1.0055647,0.211676,-0.706189,-0.66437,-9.409213,-2.4851813,-0.48362875,-0.63067627,0.35913086,0.52178955,getting up
+-1.1671734,9.870096,-1.151611,0.211967,-0.708288,-0.662024,-9.409213,-2.4851813,-0.48362875,-0.63067627,0.35913086,0.52178955,getting up
+-1.2114661,9.759963,-1.0977415,0.212862,-0.708956,-0.660991,-9.409213,-2.4851813,-0.48362875,-0.63067627,0.35913086,0.52178955,getting up
+0.7146692,1.3934253,9.340978,0.089651,-0.00312,0.417283,3.9743748,7.73806,5.6407394,-0.67645264,0.33605957,0.5355835,getting up
+0.82599956,1.3455414,9.48463,0.087991,-0.00456,0.416977,2.0973208,1.4173675,8.949526,-0.79937744,0.18200684,0.55792236,getting up
+0.6584055,1.5945383,9.496601,0.092038,-0.00257,0.416586,2.0973208,1.4173675,8.949526,-0.79937744,0.18200684,0.55792236,getting up
+1.328782,2.9963434,11.656171,0.148971,0.007997,0.423309,2.2170308,2.15957,9.174581,0.1026001,0.14648438,0.9837036,getting up
+-1.3611037,8.628703,4.1359835,0.438745,0.229936,0.319773,-15.069105,-25.7664,2.0350714,0.08215332,-0.4119873,0.8272705,getting up
+-4.045004,9.002198,1.3275849,0.491764,0.397139,0.263512,-8.968679,-22.567745,0.92895025,0.09820557,-0.48492432,0.78845215,getting up
+-3.3542767,9.003395,-1.6184803,0.529851,0.51857,0.276504,-4.903325,-7.61835,-3.098097,0.045166016,-0.80059814,0.5270996,getting up
+-2.5366566,8.859743,-3.7912183,0.545344,0.563223,0.349472,-4.903325,-7.61835,-3.098097,0.045166016,-0.80059814,0.5270996,getting up
+0.29448682,9.293094,-4.8973393,0.629883,0.535572,0.366506,-5.2049947,-5.9663506,-2.0398598,-0.012268066,-0.8010864,0.5418701,getting up
+-1.6484078,8.002619,-5.0182467,0.607939,0.6292,0.303782,-7.469909,-6.4068837,-0.17717093,0.066833496,-0.6807251,0.3007202,getting up
+-1.3563153,8.2037325,-2.079364,0.538547,0.561007,0.388253,-9.849746,-6.0046577,0.34955344,-0.057861328,-0.68237305,0.25274658,getting up
+-0.04070143,9.927557,-1.5753847,0.626124,0.426154,0.347018,-6.861782,-8.949526,5.659893,-0.11682129,-0.40185547,0.8427124,getting up
+-0.5554548,9.822212,-1.6783354,0.614296,0.428075,0.354046,2.873042,2.6288335,8.350976,0.057556152,0.1303711,0.98083496,getting up
+-1.246182,9.847352,-0.5434838,0.587803,0.410959,0.341078,4.5537715,2.3463178,8.1642275,0.12390137,0.16320801,0.9719238,getting up
+-2.15957,7.85777,-7.620744,0.764364,0.48603,0.164172,2.5713725,2.944868,8.844181,0.112854004,0.21234131,0.96325684,getting up
+-0.81761986,8.972271,-1.769315,0.650518,0.397484,0.293039,-2.4516625,-0.92416185,9.734824,0.018554688,-0.036621094,0.70654297,getting up
+-0.9876082,9.7240505,-0.521936,0.597225,0.390318,0.332846,-5.544971,-4.975151,7.40766,-6.1035156E-5,-0.12957764,0.6951904,getting up
+-2.8311436,9.345766,-1.7788919,0.323092,-0.672183,-0.643092,-11.932701,-2.930503,0.7613561,0.37469482,-0.60479736,-0.35321045,getting up
+0.5674258,10.207679,1.5729905,0.26551,-0.69882,-0.653699,-11.932701,-2.930503,0.7613561,0.37469482,-0.60479736,-0.35321045,getting up
+-2.825158,9.901221,-6.5708866,0.212012,-0.720192,-0.656629,-11.932701,-2.930503,0.7613561,0.37469482,-0.60479736,-0.35321045,getting up
+-5.1116204,7.4148426,-0.60573304,0.216464,-0.724514,-0.648422,-11.932701,-2.930503,0.7613561,0.37469482,-0.60479736,-0.35321045,getting up
+0.051475335,9.0476885,3.6942532,0.524853,0.176888,0.27445,3.8833952,-8.441956,4.7165775,0.5126953,-0.41912842,-0.5494385,reading
+0.12808979,8.9842415,3.7900212,0.523027,0.174178,0.273199,4.951209,-9.241618,-6.885724,0.6368408,0.5133667,-0.082336426,reading
+0.06703765,8.965088,3.6499605,0.523948,0.172769,0.272169,4.951209,-9.241618,-6.885724,0.6368408,0.5133667,-0.082336426,reading
+0.045489833,9.010578,3.8175547,0.523228,0.172727,0.271831,4.7500963,-8.7053175,1.0869676,0.46624756,0.45837402,-0.20721436,reading
+0.06943185,9.036914,3.776853,0.523728,0.172254,0.271803,5.779603,-8.145074,-3.6966474,0.6072998,0.5275879,-0.047851562,reading
+0.034715924,9.011775,3.7122097,0.528377,0.161318,0.252932,5.9902925,-8.240842,-4.7548847,0.65093994,0.5335083,-0.018737793,reading
+0.06943185,9.009381,3.7313633,0.503882,0.228535,0.357397,5.2720323,-7.6949644,2.767697,0.4074707,0.42651367,-0.20239258,reading
+0.22505496,8.893262,3.8031895,0.482578,0.25763,0.418032,5.497087,-9.639056,-2.5713725,0.5736084,0.5039673,-0.097229004,reading
+0.1352724,9.010578,3.8295257,0.483855,0.259558,0.416577,6.6846113,-6.6893997,-2.1643584,0.4557495,0.62420654,-0.16363525,reading
+0.08020575,8.9842415,3.7900212,0.483776,0.261572,0.41761,6.0621185,-7.0006456,-4.0701427,0.4835205,0.66693115,-0.14245605,reading
+0.016759412,8.956709,3.9025488,0.489382,0.264482,0.413744,6.3685765,-7.1634517,-3.9983168,0.4979248,0.6590576,-0.14666748,reading
+0.46447513,9.993398,2.9735985,0.565463,0.263197,0.325919,5.415684,-7.6614456,-5.0182467,0.5946655,0.635437,-0.07513428,reading
+0.19153613,8.400057,4.8973393,0.455782,0.198238,0.385135,6.114791,-7.7332716,-2.906561,0.51586914,0.62298584,-0.12536621,reading
+0.24181437,8.479065,4.8386817,0.45569,0.196415,0.383573,6.0046577,-7.6710224,-1.043872,0.4593506,0.60339355,-0.15960693,reading
+0.2645593,8.3868885,4.911705,0.455563,0.195669,0.378565,6.5457473,-7.752425,-2.0733786,0.53564453,0.6374512,-0.020568848,reading
+0.24899697,8.364143,4.909311,0.456406,0.195833,0.377804,6.325481,-8.528147,-1.388637,0.49041748,0.607666,-0.10461426,reading
+0.25139117,8.350976,4.9464207,0.454331,0.194655,0.378158,6.483498,-8.00621,-1.2066777,0.46258545,0.5890503,-0.1472168,reading
+0.23223756,8.367735,5.0254292,0.453797,0.192742,0.377,6.919243,-6.9000893,-3.5098996,0.51330566,0.6300049,-0.051452637,reading
+0.44891283,8.289924,5.040992,0.468045,0.150584,0.303261,7.469909,-6.7803793,-2.7820623,0.5115967,0.6220093,-0.022644043,reading
+0.31124622,8.354567,5.00867,0.475315,0.126131,0.260557,7.469909,-6.7803793,-2.7820623,0.5115967,0.6220093,-0.022644043,reading
+0.557849,8.383297,5.044583,0.485259,0.081805,0.185081,7.350199,-5.674258,-2.873042,0.57373047,0.5710449,0.06640625,reading
+0.45489833,8.331821,4.9404354,0.480499,0.117909,0.244601,5.257667,-9.32781,0.81402856,0.5319214,0.446167,-0.09173584,reading
+0.22984336,8.49343,4.8243165,0.467962,0.167377,0.332289,5.2241483,-9.892841,-0.6655881,0.4977417,0.5111084,-0.18249512,reading
+0.25857377,8.425196,4.847061,0.456957,0.186617,0.369656,5.434838,-9.241618,-0.18195933,0.4727173,0.5373535,-0.19946289,reading
+0.29807812,8.499416,4.691438,0.46124,0.187768,0.361762,7.809886,-8.6334915,-1.1492168,0.44396973,0.5876465,-0.14300537,reading
+0.5422867,8.53892,4.5920787,0.470563,0.186151,0.356845,5.185841,-5.363012,2.3463178,0.17828369,0.5204468,-0.12023926,reading
+0.108936176,8.610746,4.4687777,0.473924,0.189529,0.353294,5.185841,-5.363012,2.3463178,0.17828369,0.5204468,-0.12023926,reading
+0.41299978,8.645462,4.4005427,0.48497,0.183085,0.348634,8.2169,-6.019023,-2.432509,0.3779297,0.67663574,-0.032714844,reading
+0.37588966,8.62152,4.5513773,0.483387,0.183852,0.34884,8.025364,-5.8466406,-1.0055647,0.3779297,0.67663574,-0.032714844,reading
+0.2837129,8.623915,4.5441947,0.479515,0.189044,0.356414,7.704541,-6.4978633,-1.364695,0.38781738,0.64263916,-0.079833984,reading
+0.35434186,8.644265,4.437653,0.475872,0.203589,0.378237,8.020576,-5.746084,-0.49320555,0.32574463,0.6552124,-0.1182251,reading
+0.38307226,8.644265,4.426879,0.479259,0.193537,0.361896,8.336611,-6.0142345,-1.1875241,0.34692383,0.66522217,-0.06640625,reading
+0.30885202,8.656237,4.4328647,0.480626,0.196025,0.360675,7.771579,-6.95755,-2.7629087,0.4222412,0.6610718,-0.058654785,reading
+0.39743748,8.664616,4.459201,0.482108,0.190997,0.359816,7.771579,-6.95755,-2.7629087,0.4222412,0.6610718,-0.058654785,reading
+0.32680854,8.652645,4.5358152,0.480967,0.191436,0.359034,8.236053,-5.1810527,-1.3311762,0.35473633,0.6616821,-0.054382324,reading
+0.39983168,8.619126,4.4603977,0.480877,0.189432,0.358086,8.236053,-5.1810527,-1.3311762,0.35473633,0.6616821,-0.054382324,reading
+0.31124622,8.639477,4.4675803,0.480206,0.193002,0.358359,7.824251,-4.1371803,-4.687847,0.387146,0.7139282,-0.012817383,reading
+0.40462008,8.608353,4.485537,0.482988,0.190831,0.356566,7.335834,-3.4237084,-6.0525417,0.47314453,0.72094727,0.05432129,reading
+0.36990416,8.639477,4.5202527,0.481752,0.190689,0.356889,7.872135,-5.00867,-4.55856,0.548645,0.7122803,0.122802734,reading
+0.46088383,8.717288,4.4807487,0.481568,0.189589,0.35649,7.5465236,-6.3829417,0.18674773,0.34552002,0.6011963,-0.16253662,reading
+0.4333505,8.64666,4.5513773,0.480823,0.189283,0.356862,7.5465236,-6.3829417,0.18674773,0.34552002,0.6011963,-0.16253662,reading
+0.2717419,8.622718,4.423288,0.478732,0.193337,0.357637,7.038953,-7.3166804,-0.91458505,0.4180298,0.6279297,-0.11242676,reading
+0.22146365,8.611943,4.453215,0.47913,0.193361,0.356561,8.24563,-5.3821654,-3.6296098,0.48815918,0.6576538,0.07128906,reading
+0.21308395,8.669404,4.5238442,0.479402,0.190629,0.353405,7.7093296,-6.397307,2.030283,0.3267212,0.6272583,-0.1003418,reading
+0.20470424,8.603564,4.578911,0.4785,0.190347,0.35378,8.269572,-6.301539,-1.9871874,0.36401367,0.6604614,-0.061462402,reading
+0.21068975,8.65025,4.4807487,0.480444,0.185876,0.351681,8.269572,-6.301539,-1.9871874,0.36401367,0.6604614,-0.061462402,reading
+0.32561144,8.652645,4.759673,0.4795,0.189287,0.35033,8.010999,-2.4229321,-1.8770541,0.19390869,0.604126,-0.1749878,reading
+0.40581718,8.622718,4.4005427,0.484372,0.183214,0.344614,8.010999,-2.4229321,-1.8770541,0.19390869,0.604126,-0.1749878,reading
+0.4225766,8.644265,4.453215,0.491422,0.170771,0.329321,8.010999,-2.4229321,-1.8770541,0.19390869,0.604126,-0.1749878,reading
+0.30047232,8.616732,4.5082817,0.508734,0.029415,0.088808,8.365341,-6.8330517,-0.7661445,0.4449463,0.5628662,0.008117676,reading
+0.38307226,8.470686,4.823119,0.505399,0.003563,0.039837,8.101978,-4.3287168,-3.821146,0.62957764,0.53759766,0.21777344,reading
+0.30765492,8.507795,4.6782703,0.505728,-0.006423,0.021294,8.111555,-3.9695864,-5.57849,0.75024414,0.42193604,0.28771973,reading
+0.2633622,8.694544,4.408922,0.520918,-0.013196,0.007811,8.135497,-5.094861,-3.3901896,0.6911621,0.43804932,0.26019287,reading
+0.23463176,8.668207,4.3742065,0.521188,-0.014667,0.007118,8.135497,-5.094861,-3.3901896,0.6911621,0.43804932,0.26019287,reading
+0.1604115,8.700529,4.498705,0.521065,-0.012916,0.009618,8.135497,-5.094861,-3.3901896,0.6911621,0.43804932,0.26019287,reading
+0.25498247,8.746018,4.2102036,0.427971,0.295937,0.538508,7.4268136,-3.5194764,-5.315128,0.4312744,0.7504883,0.06402588,reading
+0.46926352,8.799889,4.2437224,0.355216,0.371939,0.669981,7.9966335,-4.4196963,-4.6351743,0.19732666,0.829895,-0.12286377,reading
+0.22744916,8.631097,3.679888,0.307022,0.415636,0.723846,6.339846,-8.384495,-0.31124622,-0.0017089844,0.7738037,-0.48883057,reading
+0.2837129,8.944737,4.1862617,0.328889,0.430042,0.691728,6.3302693,-8.992621,-1.3024458,-0.026672363,0.729126,-0.54486084,reading
+-0.90261406,9.451111,0.664391,0.41849,0.560944,0.532071,6.8809357,-8.700529,-0.6368576,-0.041748047,0.70129395,-0.5609131,reading
+-2.0949266,5.5461683,-4.320337,0.532796,0.687411,0.338894,7.350199,-7.0724716,0.9816227,-0.05670166,0.6612549,-0.5805054,reading
+-0.6775591,10.178948,-1.2785037,0.481581,0.567819,0.459069,6.5840545,-9.121908,0.770933,0.01727295,0.7211304,-0.48657227,reading
+-0.47405192,9.61272,2.1583729,0.431698,0.44596,0.54865,8.0924015,-7.7907324,-2.4660277,0.13513184,0.8187866,-0.307312,reading
+-0.5793968,9.610326,2.112883,0.424366,0.449894,0.549505,3.6727054,-7.144298,-2.9640217,0.16827393,0.77459717,-0.36462402,reading
+-0.40222588,9.55047,2.1320367,0.430287,0.449814,0.549681,6.421249,-7.608773,-2.1068976,0.101745605,0.7675781,-0.4169922,reading
+-0.4297592,9.606734,2.12246,0.426088,0.452766,0.552639,6.421249,-7.608773,-2.1068976,0.101745605,0.7675781,-0.4169922,reading
+-0.36391866,9.574412,2.2038627,0.424412,0.453767,0.556486,6.397307,-8.312668,-2.3175871,0.09124756,0.7698364,-0.4336548,reading
+-0.41180268,9.563639,2.2266076,0.42385,0.452525,0.556342,6.3350577,-7.9104424,-6.1530986,0.10070801,0.7746582,-0.4111328,reading
+-0.10175357,9.544485,2.4301147,0.386091,0.48693,0.611933,6.7324953,-6.7133417,-4.247314,0.11340332,0.8291626,-0.30474854,reading
+-0.19871874,9.470264,2.0638018,0.333603,0.521783,0.665704,7.091625,-6.1387334,-4.4005427,0.13031006,0.8366089,-0.26818848,reading
+-0.21667525,9.563639,2.1428106,0.356477,0.510714,0.640012,6.8426285,-6.612785,-4.6160207,0.17901611,0.8216553,-0.24829102,reading
+-0.22266077,8.842984,-4.537012,0.356985,0.765486,0.472036,3.0071173,-8.690952,-2.801216,0.2524414,0.791687,-0.47131348,reading
+-1.3934253,9.868899,-1.4269443,0.324254,0.724224,0.54202,3.7014358,-7.824251,-0.038307227,-0.06591797,0.6723633,-0.69799805,reading
+-0.40102878,9.528923,-1.316811,0.311577,0.703091,0.560119,6.143522,-5.2768207,3.8977604,-0.13586426,0.536499,-0.78045654,reading
+-0.30885202,10.247183,-1.7669208,0.30072,0.703998,0.560515,2.815581,-0.23463176,8.66701,-0.1743164,-0.044921875,-0.9202881,reading
+-1.4652514,9.01776,3.4009635,0.26317,0.521783,0.69711,-0.6751649,-5.291186,-8.714894,-0.37243652,0.88983154,-0.23016357,reading
+-1.6124948,9.473856,3.21661,0.259809,0.520139,0.694731,-0.6751649,-5.291186,-8.714894,-0.37243652,0.88983154,-0.23016357,reading
+-1.553837,9.440337,3.3387144,0.258307,0.524715,0.685753,-0.6751649,-5.291186,-8.714894,-0.37243652,0.88983154,-0.23016357,reading
+-0.58298814,9.3421755,2.7593174,0.262307,0.523689,0.684083,-0.6751649,-5.291186,-8.714894,-0.37243652,0.88983154,-0.23016357,reading
+-0.9576807,9.220071,3.0992942,0.263974,0.522447,0.683864,-0.6751649,-5.291186,-8.714894,-0.37243652,0.88983154,-0.23016357,reading
+-0.8619126,8.913613,3.0322564,0.268156,0.520667,0.683479,-0.6751649,-5.291186,-8.714894,-0.37243652,0.88983154,-0.23016357,reading
+-0.88944596,9.701305,2.9616275,0.272036,0.519901,0.681376,-0.6751649,-5.291186,-8.714894,-0.37243652,0.88983154,-0.23016357,reading
+-0.5231331,8.980651,3.1483753,0.274279,0.520218,0.680266,-0.6751649,-5.291186,-8.714894,-0.37243652,0.88983154,-0.23016357,reading
diff --git a/datasets/backup/activity_data_readme.txt b/datasets/backup/activity_data_readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..47610a70c31db34d8fe1b83cb20e4dd99bb35316
--- /dev/null
+++ b/datasets/backup/activity_data_readme.txt
@@ -0,0 +1,17 @@
+Columns:
+
+Col 1: smartphone acceleration x
+Col 2: smartphone acceleration y
+Col 3: smartphone acceleration z
+Col 4: smartphone rotation x
+Col 5: smartphone rotation y
+Col 6: smartphone rotation z
+Col 7: watch acceleration x
+Col 8: watch acceleration y
+Col 9: watch acceleration z
+Col 10: watch rotation x
+Col 11: watch rotation y
+Col 12: watch rotation z
+Col 13: Activity
+
+Activity: walking, reading, working, dancing, lying, getting up
\ No newline at end of file
diff --git a/datasets/backup/activity_model.eg b/datasets/backup/activity_model.eg
index 9e8e7dd5b6fb787250d60beb9827f673fdd59424..03530cd457c6b950e0d9b5f659763d1ab09132a4 100644
--- a/datasets/backup/activity_model.eg
+++ b/datasets/backup/activity_model.eg
@@ -1,4 +1,4 @@
-encog,BasicNetwork,java,3.4.0,1,1557488730242
+encog,BasicNetwork,java,3.4.0,1,1557909364798
 [BASIC]
 [BASIC:PARAMS]
 [BASIC:NETWORK]
@@ -8,15 +8,15 @@ contextTargetOffset=0,0,0
 contextTargetSize=0,0,0
 endTraining=2
 hasContext=f
-inputCount=4
-layerCounts=1,8,5
-layerFeedCounts=1,7,4
+inputCount=12
+layerCounts=6,20,13
+layerFeedCounts=6,19,12
 layerContextCount=0,0,0
-layerIndex=0,1,9
-output=0.5539299775,0.0770594835,-0.302657233,0.9894768853,-0.0460538615,-0.9564997713,0.1328260972,0.84692464,1,-1,0.4666666667,0.0909090909,-0.7627118644,1
-outputCount=1
-weightIndex=0,8,43
-weights=-0.2082891814,-0.6843874613,0.600132684,0.2232178679,0.6316689217,-0.7989016095,0.7585971909,-0.0827567588,-0.0800286678,4.124276145,1.1983455831,1.6385983977,-0.7866403776,-0.8163260492,-0.2264578939,0.5625320698,-0.2546902571,-1.2684824676,-1.0893738235,0.1764525443,0.6958134679,-0.575860844,0.9468363747,-3.3934510615,0.4590571878,1.1354141604,4.7051910634,-0.1682786324,1.3419375086,0.708864249,2.5175195691,1.2754066059,-0.1480365369,-0.8213163364,-0.5841608912,-3.5535412204,0.168548408,0.0365107638,-0.6519168374,-0.6772203052,0.3567520699,-0.1143981536,0.789607884
+layerIndex=0,6,26
+output=-1,-0.999941951,-0.9999999856,-1,-1,0.9999421247,-0.777513258,-0.7259196773,0.9943765659,0.2481214155,-0.9814528965,0.9999864488,0.8404129084,0.815836082,-0.9999989535,0.9995247829,0.9987382279,0.9999999049,-0.9993081609,0.9999665456,0.0509152395,-0.8630395179,0.4931944657,-0.1322178208,0.9999336481,1,0.4095700256,-0.2608455519,0.0890803147,0.3287271902,0.4880132997,0.6346281069,-0.0117173787,0.0520885687,-0.2136645978,0.1085839609,0.866751363,-0.3758290953,1
+outputCount=6
+weightIndex=0,120,367
+weights=-0.807860843,8.8038595602,-0.8887942697,-0.2482259862,-2.6715815966,-1.0147829779,7.2253854391,0.7677979664,1.7393951081,-7.2205204777,-0.7158564085,3.0659070964,3.460430261,-3.4329922327,0.4101927722,0.5453784703,0.8165530436,4.716875382,-9.6201236498,-5.7367951892,3.9799156577,9.3348279088,4.3915877547,-0.9147907016,-1.7637150424,-2.7951061173,7.6193279235,-4.4430554019,-0.6973245171,-1.8487781215,2.9578768242,0.6977835646,0.7270075459,1.2480878691,0.668025993,0.1428382909,-2.4617953279,-0.2217855075,0.0254528069,-2.981585079,1.6282585196,-0.123622186,-2.642368101,0.4103229791,5.5673626759,-0.421941354,-3.3722786503,1.8104388855,-2.7510241109,5.2326127548,-1.8029666076,-3.1279903984,-1.6582358081,0.0226427407,2.1153790407,2.4102985138,6.1979803649,-3.7889081155,-4.2349389036,-0.5113515473,-0.2616336967,1.9955826497,-0.5420221412,-0.1549681702,-1.0180144348,-0.1927509066,5.3269241013,-0.3952759864,0.0633167711,-8.7414544467,0.1551191587,-0.9060537306,3.4643463816,2.2219189245,-0.2830296756,-2.8926155153,2.6588479413,3.3352304344,0.2609626681,-9.065642271,0.7275716345,-1.2859638865,-3.7540899608,-5.3612454672,-6.9330880077,0.8274510555,-3.9138051076,-4.4586802452,2.1717905474,-3.3279739569,-3.74504423,1.8891972626,1.2931913191,-2.5456423367,-5.1830694786,-1.6635311191,-3.7291349263,0.286879429,2.1580527517,-0.2163243754,-5.6846687803,7.9164040735,0.5900152192,-0.2679985126,-1.3297131527,-2.133254549,-2.1924118344,6.4289779109,-0.8614422947,0.2892541908,6.1373131091,-0.2703515541,0.3932655947,2.9867383773,-0.6807448746,-0.095529382,0.2974641783,4.1823114205,-1.0837319058,-4.7038277485,0.4185182341,-0.9951654318,0.2924012395,-0.0815542105,-0.8483176531,-0.6343641976,-3.7267050898,4.1385523559,-0.7234322421,-0.0015920523,-0.4730048327,0.0128334369,-0.6515477238,0.8310683874,0.0521112099,-0.5004614845,-1.0406931325,1.3495184796,-0.2784626262,-0.947876886,0.6484202615,-0.2346390883,-0.2206284681,-0.03828563,-0.0329968586,-1.3922884721,0.9494749126,-0.3180778658,8.0211237756,-2.2580258465,-0.3995282874,-0.303448834,1.1066965634,24.0728334823,-0.2268280352,0.621235355,0.5665754615,0.1514082922,1.0879794154,1.1645559023,-0.0117356823,-1.3819606127,-3.3123220925,0.6648250903,-1.6811483001,-1.6092396571,1.1668127368,-0.091563689,1.3543509411,0.5426333618,-0.9005430424,0.6727610283,0.1508518783,0.7658848177,-0.6238762641,0.1918777366,0.9575425248,-0.7813803874,-4.4141316982,-2.9532385753,-1.195273283,-0.8080480854,-2.3065462071,0.0843507156,-0.2111857155,1.4642106112,-4.7755876,-0.5370941079,-1.5263216423,-0.1014997225,2.1228042729,-23.4394575118,0.4425709962,-2.7757958543,-2.3844200037,2.4050551606,1.0774484478,1.0461020878,1.8054486912,0.6288737367,0.4917246094,0.3816336935,0.2819198813,-0.0644500815,-1.0245826722,1.6927726875,-0.8068175833,3.2796910576,0.3827983311,1.9838446556,0.1663296295,0.4224175548,-3.2757536796,0.9584898403,-1.2231130137,0.0180498101,1.2252324384,2.218881373,-0.3344132966,-0.3760729952,0.9674830185,-0.4498532874,-0.0358966168,-0.1184934549,-0.40083101,1.5611803497,-0.7624288785,-0.7570238654,-0.2308594882,0.0331855661,-0.2331280737,1.7124860429,11.8307142364,-4.9747223711,-3.6972670918,0.9359122321,0.2805586653,0.5789046139,-0.4821827218,-0.5012618865,3.3308922329,3.0138742365,-0.649170218,-0.9814744155,0.6945653399,0.6042909188,-0.1040725816,0.8212366277,-0.7628021895,0.7945614402,-0.2370907549,0.7213069448,-5.2216507996,12.1953689108,0.9492669179,0.303654359,3.829532799,-7.3786426345,0.80285708,-2.3124877047,1.2685793389,-0.1157147691,-0.5218090624,-4.0184887608,2.3634224307,-0.4882525326,6.7893181498,18.5185159236,0.7401208222,1.5431987902,-0.4885846641,0.798421274,-2.1382117969,-0.3478095562,0.5642447262,-0.0422708974,0.1442477143,0.5305670784,0.841046642,-0.1539811203,-2.7790660636,0.3551749119,1.483760715,-0.6033067485,0.3766643263,-1.6615927455,-1.9694684241,1.3991149167,-0.2560674616,-0.1958520363,-0.6078569689,6.8193613163,4.5918831032,-2.3098023508,1.20716916,0.4349728529,0.6212960796,-4.7749593857,-0.4298368881,1.128089427,-3.8929915406,0.2233455323,0.8800441891,0.4479777042,0.7693426614,-2.3334096263,-1.0958133765,-0.5217239264,-0.8230662116,1.0920240838,-1.4266851988,-3.2618651917,0.9524133401,0.3088891939,0.6451786072,0.5672551395,0.6086541809,-0.1986973089,-0.3584497656,1.1775602855,-2.2594346031,-1.0000204681,1.5632794451,-1.3091885793,-3.0474806335,0.5907196404,0.7939783867,-0.6395074293,0.6107121212,-2.6820035151,1.1298062973,1.1231689873,-0.0859923099,0.3190423508,10.8199124833,-1.2338391087,1.0758309334,5.02998815,-0.0794477004,2.2269367409,-0.2592628727,0.4566760146,-0.4808110322,0.6787999485,0.9621965111,-1.5319912869,1.6434800583,2.56489109,-2.8561671135,-1.2477765961,-0.9302886149,0.443918428,4.195332394,0.0876081994,1.8887291587,-4.2659978401,-0.4024067255,0.743976285,-0.7993538026,-0.3815844929,0.6602616772,-1.9021562524,-6.1477056809,-1.0920029222,1.8100708581,-0.3694162085,0.8981589549
 biasActivation=0,1,1
 [BASIC:ACTIVATION]
 "org.encog.engine.network.activation.ActivationTANH"
diff --git a/datasets/backup/preference_data.csv b/datasets/backup/preference_data.csv
index 12c125ce2bbdc9ec6bb9762f05f6a83c3b863bb0..264467a975f3de3001a57bc9902ec5d9308db23f 100644
--- a/datasets/backup/preference_data.csv
+++ b/datasets/backup/preference_data.csv
@@ -1,418 +1,600 @@
-7,20,12,13,2
-7,20,14,40,1
-7,20,14,40,2
-7,21,13,2,2
-7,21,13,2,2
-7,21,14,23,2
-7,21,14,23,2
-7,21,15,41,2
-7,21,16,54,2
-7,21,16,54,2
-7,21,17,45,3
-7,22,12,28,3
-7,22,15,35,2
-7,22,15,35,2
-7,22,18,59,3
-7,22,18,59,3
-7,23,12,32,2
-7,23,12,32,2
-7,23,16,7,2
-7,23,16,7,2
-7,23,16,7,2
-7,23,16,7,2
-7,23,16,7,2
-7,24,12,4,0
-7,24,12,4,0
-7,24,12,4,1
-7,24,14,38,2
-7,24,14,38,2
-7,24,18,54,3
-7,25,12,31,0
-7,25,12,32,1
-7,25,12,32,1
-7,25,15,6,3
-7,25,18,56,3
-7,26,13,41,2
-7,26,19,14,3
-7,27,11,39,2
-7,27,11,39,3
-7,27,11,46,3
-7,27,11,46,2
-7,27,13,8,2
-7,27,13,8,2
-7,27,13,9,2
-7,27,13,45,2
-7,27,13,45,2
-7,27,15,38,3
-7,28,12,12,2
-7,28,12,13,2
-7,28,12,41,2
-7,28,12,41,2
-7,28,12,41,2
-7,28,14,0,1
-7,28,14,0,2
-7,28,15,21,3
-7,28,18,56,3
-7,29,10,9,1
-7,29,10,9,1
-7,29,10,9,1
-7,29,11,54,0
-7,29,11,54,0
-7,29,11,54,0
-7,29,11,54,1
-7,29,14,10,2
-7,29,16,44,2
-7,29,16,44,2
-7,30,16,7,3
-7,30,18,45,3
-7,31,13,2,0
-7,31,13,2,1
-7,31,13,3,1
-7,31,13,3,1
-7,31,13,3,1
-7,31,18,39,3
-8,1,12,22,0
-8,1,12,22,1
-8,1,14,20,2
-8,1,14,20,2
-8,1,14,20,2
-8,1,15,55,3
-8,1,18,31,3
-8,1,18,37,3
-8,1,18,37,3
-8,1,19,2,3
-8,1,19,2,3
-8,1,20,5,3
-8,2,10,9,2
-8,2,10,9,1
-8,2,10,9,2
-8,2,10,9,2
-8,2,13,58,2
-8,2,13,58,2
-8,2,15,44,3
-8,2,15,44,3
-8,2,15,44,3
-8,2,17,21,3
-8,2,17,21,3
-8,2,17,21,3
-8,3,13,31,1
-8,3,13,31,2
-8,3,13,32,2
-8,3,16,43,3
-8,4,13,20,1
-8,4,13,20,2
-8,4,18,27,3
-8,5,13,37,2
-8,5,13,37,2
-8,5,18,33,3
-8,6,11,24,3
-8,6,11,24,3
-8,6,11,24,3
-8,6,13,50,3
-8,7,13,4,2
-8,7,13,4,2
-8,7,14,56,3
-8,8,12,13,2
-8,8,12,13,2
-8,8,15,51,2
-8,8,15,51,2
-8,8,15,51,3
-8,9,13,32,2
-8,9,13,32,2
-8,9,13,32,2
-8,9,15,8,2
-8,9,15,8,2
-8,9,15,8,2
-8,9,16,19,2
-8,10,11,32,0
-8,10,11,32,1
-8,10,11,32,1
-8,10,13,13,1
-8,10,13,13,1
-8,10,13,13,2
-8,10,16,42,3
-8,10,16,42,3
-8,11,14,6,2
-8,11,14,7,2
-8,11,18,54,3
-8,11,18,54,3
-8,11,18,54,3
-8,12,12,27,1
-8,12,12,27,1
-8,12,12,28,1
-8,12,13,53,2
-8,12,13,53,2
-8,12,13,53,2
-8,12,15,21,3
-8,13,13,16,1
-8,13,13,16,1
-8,13,13,16,1
-8,13,14,14,2
-8,13,14,14,2
-8,13,16,11,3
-8,13,17,18,3
-8,14,13,7,1
-8,14,13,7,1
-8,14,13,7,1
-8,14,13,7,1
-8,14,13,7,2
-8,14,13,7,2
-8,14,15,6,3
-8,15,14,5,2
-8,15,14,5,2
-8,15,14,6,2
-8,15,14,6,2
-8,15,16,41,3
-8,15,16,41,3
-8,15,17,30,3
-8,16,13,40,2
-8,16,13,40,2
-8,16,17,52,3
-8,16,17,53,3
-8,17,13,34,1
-8,17,13,35,2
-8,17,14,7,2
-8,17,19,2,3
-8,18,10,21,3
-8,18,11,14,2
-8,18,11,14,2
-8,18,11,14,2
-8,18,11,14,2
-8,18,14,25,2
-8,18,14,25,3
-8,18,14,25,2
-8,18,18,18,3
-8,18,18,19,3
-8,19,18,33,3
-8,19,18,33,3
-8,19,18,33,3
-8,19,18,33,3
-8,20,14,28,2
-8,20,14,28,2
-8,20,14,28,2
-8,20,14,28,2
-8,20,17,8,3
-8,20,18,22,3
-8,21,11,24,1
-8,21,11,24,1
-8,21,11,24,1
-8,21,15,34,3
-8,21,18,55,3
-8,22,12,3,1
-8,22,12,4,2
-8,22,12,4,2
-8,22,13,51,2
-8,22,13,51,2
-8,22,13,51,2
-8,22,18,12,3
-8,22,18,12,3
-8,22,18,12,3
-8,22,18,12,3
-8,22,18,40,3
-8,22,18,40,3
-8,23,13,42,1
-8,23,13,42,1
-8,23,17,32,3
-8,23,19,28,3
-8,23,20,27,3
-8,23,20,27,3
-8,23,21,49,3
-8,24,14,0,2
-8,24,14,0,2
-8,24,14,0,2
-8,24,14,0,2
-8,24,15,4,3
-8,24,15,4,3
-8,24,16,2,3
-8,24,16,3,3
-8,24,16,37,3
-8,24,17,9,3
-8,24,17,14,3
-8,25,13,34,1
-8,25,13,34,1
-8,25,13,34,1
-8,25,13,34,1
-8,25,13,34,1
-8,25,15,1,3
-8,25,17,58,3
-8,26,10,29,0
-8,26,10,29,0
-8,26,10,29,0
-8,26,10,29,0
-8,26,10,29,0
-8,26,16,42,3
-8,26,16,42,3
-8,26,18,41,3
-8,26,18,41,3
-8,27,13,41,2
-8,27,13,41,2
-8,27,13,41,2
-8,27,13,41,2
-8,27,17,42,3
-8,28,11,9,1
-8,28,11,9,1
-8,28,12,14,0
-8,28,12,14,1
-8,28,12,14,0
-8,28,15,3,2
-8,28,15,3,2
-8,28,16,31,3
-8,28,17,40,3
-8,29,14,44,3
-8,29,17,25,3
-8,30,12,5,0
-8,30,12,5,0
-8,30,12,5,0
-8,30,13,32,1
-8,30,13,32,1
-8,30,13,56,2
-8,30,14,23,2
-8,30,14,23,2
-8,30,14,23,2
-8,30,14,23,2
-8,30,14,41,2
-8,30,14,41,2
-8,30,14,41,2
-8,30,15,50,3
-8,30,17,0,3
-8,30,18,59,3
-8,30,18,59,3
-8,31,14,31,2
-8,31,14,31,2
-8,31,14,31,2
-8,31,17,59,3
-8,31,18,0,3
-9,1,16,13,3
-9,1,16,13,3
-9,1,16,13,3
-9,1,17,41,3
-9,2,13,44,1
-9,2,13,44,1
-9,2,13,44,1
-9,2,14,49,2
-9,2,14,49,2
-9,2,14,49,2
-9,2,16,6,3
-9,2,16,6,3
-9,2,17,2,3
-9,3,16,9,3
-9,3,17,35,3
-9,3,17,36,3
-9,4,12,57,1
-9,4,12,57,1
-9,4,15,8,3
-9,4,15,34,3
-9,4,16,26,3
-9,4,16,26,3
-9,4,18,37,3
-9,4,18,37,3
-9,4,18,37,3
-9,6,11,18,0
-9,6,11,18,0
-9,6,12,54,1
-9,6,12,54,1
-9,6,14,21,2
-9,6,14,21,2
-9,6,19,20,3
-9,7,11,50,0
-9,7,14,17,2
-9,7,14,57,3
-9,7,14,57,3
-9,7,16,56,3
-9,7,16,56,3
-9,7,16,56,3
-9,7,16,56,3
-9,7,18,38,3
-9,7,18,38,3
-9,8,11,4,2
-9,8,11,4,2
-9,8,11,13,0
-9,8,11,13,0
-9,8,11,13,0
-9,8,11,13,0
-9,8,11,13,0
-9,8,11,14,0
-9,8,11,14,1
-9,8,11,14,1
-9,8,12,1,0
-9,8,12,1,0
-9,8,12,1,0
-9,8,12,1,0
-9,8,12,1,0
-9,8,12,1,1
-9,8,12,36,0
-9,8,12,36,0
-9,8,12,36,0
-9,8,12,36,0
-9,8,12,36,0
-9,8,13,37,1
-9,8,13,37,1
-9,8,13,37,1
-9,8,14,20,2
-9,8,14,20,2
-9,8,18,20,3
-9,9,12,47,1
-9,9,12,47,2
-9,9,12,47,2
-9,9,19,5,3
-9,10,13,15,1
-9,10,13,15,1
-9,10,13,15,0
-9,10,16,49,3
-9,10,19,6,3
-9,10,21,5,3
-9,11,14,16,2
-9,11,14,16,2
-9,11,14,16,2
-9,11,18,41,3
-9,12,14,43,2
-9,12,14,43,2
-9,12,14,43,2
-9,12,16,14,3
-9,12,17,12,3
-9,12,17,12,2
-9,12,17,12,3
-9,12,17,12,2
-9,12,20,44,3
-9,13,19,52,3
-9,14,14,39,2
-9,14,14,39,2
-9,14,15,14,3
-9,14,17,29,3
-9,14,17,29,3
-9,14,17,29,3
-9,15,11,41,1
-9,15,11,41,1
-9,15,13,4,1
-9,15,14,3,1
-9,15,14,3,2
-9,16,12,36,1
-9,16,12,36,1
-9,16,12,36,1
-9,16,12,36,1
-9,16,12,48,1
-9,16,12,48,1
-9,16,13,51,1
-9,16,13,51,2
-9,16,13,51,1
-9,16,15,13,3
-9,16,15,14,3
-9,16,15,14,3
-9,17,10,27,0
-9,17,10,27,0
-9,17,11,10,0
-9,17,11,10,0
-9,17,11,10,0
-9,17,12,43,1
-9,17,12,43,1
-9,17,12,43,1
-9,17,13,32,1
-9,17,13,32,1
-9,17,14,5,1
-9,17,14,5,2
-9,17,14,6,2
-9,17,15,7,3
-9,17,15,49,3
-9,17,15,49,3
-9,17,18,12,3
-9,17,18,13,3
+walking,medium,120,70
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,medium,120,70
+walking,dimmer,120,40
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,dark,120,100
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,dimmer,120,40
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,dark,120,100
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,medium,120,70
+walking,medium,120,70
+walking,medium,120,70
+walking,bright,120,0
+walking,medium,120,70
+walking,medium,120,70
+walking,bright,120,0
+walking,dark,120,100
+walking,medium,120,70
+walking,bright,120,0
+walking,dimmer,120,40
+walking,medium,120,70
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+walking,medium,120,70
+walking,medium,120,70
+walking,bright,120,0
+walking,medium,120,70
+walking,bright,120,0
+walking,bright,120,0
+walking,bright,120,0
+reading,medium,180,70
+reading,medium,180,70
+reading,medium,180,70
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,dark,180,100
+reading,medium,180,70
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,dimmer,180,40
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,dimmer,180,40
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,dimmer,180,40
+reading,bright,180,0
+reading,dark,180,100
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+reading,medium,180,70
+reading,dimmer,180,40
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,dimmer,180,40
+reading,bright,180,0
+reading,dimmer,180,40
+reading,medium,180,70
+reading,dimmer,180,40
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,medium,180,70
+reading,dimmer,180,40
+reading,bright,180,0
+reading,dark,180,100
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+reading,bright,180,0
+reading,medium,180,70
+reading,dimmer,180,40
+reading,medium,180,70
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,bright,180,0
+reading,medium,180,70
+working,medium,240,70
+working,medium,240,70
+working,medium,240,70
+working,medium,240,70
+working,dark,240,100
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,medium,240,70
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,dimmer,240,40
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,bright,240,0
+working,medium,240,70
+working,medium,240,70
+dancing,medium,300,70
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,dimmer,300,40
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,dimmer,300,40
+dancing,dimmer,300,40
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,medium,300,70
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+dancing,dimmer,300,40
+dancing,bright,300,0
+dancing,bright,300,0
+dancing,medium,300,70
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,dimmer,7,40
+lying,bright,7,0
+lying,bright,7,0
+lying,dark,7,100
+lying,bright,7,0
+lying,dark,7,100
+lying,dimmer,7,40
+lying,medium,7,70
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,medium,7,70
+lying,bright,7,0
+lying,dimmer,7,40
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,dimmer,7,40
+lying,medium,7,70
+lying,medium,7,70
+lying,dark,7,100
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,dimmer,7,40
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,dimmer,7,40
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,dimmer,7,40
+lying,medium,7,70
+lying,medium,7,70
+lying,dark,7,100
+lying,medium,7,70
+lying,medium,7,70
+lying,bright,7,0
+lying,medium,7,70
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,bright,7,0
+lying,medium,7,70
+lying,bright,7,0
+lying,medium,7,70
+lying,medium,7,70
+lying,medium,7,70
+lying,medium,7,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,dimmer,60,40
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,dimmer,60,40
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,dark,60,100
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,dimmer,60,40
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,dimmer,60,40
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,dimmer,60,40
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,bright,60,0
+getting up,medium,60,70
+getting up,medium,60,70
diff --git a/datasets/backup/preference_data_readme.txt b/datasets/backup/preference_data_readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..44947a772810c26abf38c5a68474ec6bbc7930eb
--- /dev/null
+++ b/datasets/backup/preference_data_readme.txt
@@ -0,0 +1,6 @@
+Columns:
+
+Col 1: Activity
+Col 2: watch brightness range "bright, medium, dimmer, dark"
+Col 3: hue_color_output(red 7; green 120; blue 240; yellow 60; sky blue 180; purple 300;)
+Col 4: hue_brightness_output (1-100)
\ No newline at end of file
diff --git a/datasets/backup/preference_model.eg b/datasets/backup/preference_model.eg
index d89080e7597a74eeaaeeaf446c888df5b71600d3..cade18634c901cab30b363c80045774c4db88849 100644
--- a/datasets/backup/preference_model.eg
+++ b/datasets/backup/preference_model.eg
@@ -1,4 +1,4 @@
-encog,BasicNetwork,java,3.4.0,1,1557488730417
+encog,BasicNetwork,java,3.4.0,1,1557911310910
 [BASIC]
 [BASIC:PARAMS]
 [BASIC:NETWORK]
@@ -8,15 +8,15 @@ contextTargetOffset=0,0,0
 contextTargetSize=0,0,0
 endTraining=2
 hasContext=f
-inputCount=4
-layerCounts=1,8,5
-layerFeedCounts=1,7,4
+inputCount=10
+layerCounts=2,7,11
+layerFeedCounts=2,6,10
 layerContextCount=0,0,0
-layerIndex=0,1,9
-output=0.9469673794,-0.9648755961,0.8615541508,-0.8598528839,0.5985746411,0.8896383374,0.0598709889,-0.7822981866,1,0,0.5333333333,0.2727272727,-0.6949152542,1
-outputCount=1
-weightIndex=0,8,43
-weights=0.1888121717,0.4496118006,-1.3108981074,0.8611556326,0.5076833342,-0.5189541257,-0.2968254316,-0.6990598339,-0.8089266545,-0.1530258385,-0.87945706,1.4834066633,-0.6598364032,1.5228820144,1.169887457,3.2870010482,0.8457562238,0.3666779499,0.6063332336,-0.2016446519,-0.6531693308,0.0903625175,-0.944304788,-0.5361654522,-0.896277442,0.5212787332,-0.0307316926,1.0054148122,0.8043836161,-0.0353487384,4.7797646033,0.1127335867,0.2138097446,-0.5211129305,0.4496941391,0.33069296,0.2329707171,-0.1081882785,-1.2806698554,-1.433375251,1.5408642305,-0.1728879395,-0.8271776795
+layerIndex=0,2,9
+output=-0.9992727823,-0.9992696987,-0.9309740936,-0.5765606186,-0.9953403624,0.9980796561,0.9977514017,0.9923859296,1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,1
+outputCount=2
+weightIndex=0,14,80
+weights=1.9705514025,-0.3084166226,1.7528213458,-0.0974570978,-0.1499737841,-0.5540746477,0.2385935392,-0.1438372224,1.1557830664,0.0622712991,-1.8855878802,-1.2609309561,-0.6576113964,0.4297005747,-0.0311381565,0.1537766703,0.2964039735,1.5333395274,-1.0452772707,-0.9881976121,-0.2582409579,0.3716454615,0.4429387995,-0.0124670915,0.1443979736,-0.6120087732,-0.1460490608,0.298384149,-0.307728216,0.760185426,-0.5426063529,0.705179795,-1.7424144335,0.1061469767,1.1192085663,0.94546081,0.2091130262,0.2650630235,0.3748265294,0.9269442261,-0.9738232929,0.9948457131,0.5660549852,-0.7312612442,-0.6524477694,-0.4029404881,0.9567276632,-0.8347245317,0.2564905028,-0.8511409841,0.4024125147,-0.2976989124,0.2422415932,0.5954466086,0.5567668547,-0.1476278407,-1.8656056105,1.0121430706,-0.4530181582,-0.0465154741,0.3804366757,-0.2678650904,0.2841768014,-0.9278517911,-1.1565915328,3.2525598553,1.2799169446,0.4484322326,-0.8850576101,-1.1989224286,-0.7869492745,0.0781256597,-1.6645368809,-0.0024136924,0.21307976,-0.3029761097,-0.9576724355,0.8284677696,-1.5340053053,-0.6240855539
 biasActivation=0,1,1
 [BASIC:ACTIVATION]
 "org.encog.engine.network.activation.ActivationTANH"
diff --git a/datasets/backup/test_data.csv b/datasets/backup/test_data.csv
new file mode 100644
index 0000000000000000000000000000000000000000..12c125ce2bbdc9ec6bb9762f05f6a83c3b863bb0
--- /dev/null
+++ b/datasets/backup/test_data.csv
@@ -0,0 +1,418 @@
+7,20,12,13,2
+7,20,14,40,1
+7,20,14,40,2
+7,21,13,2,2
+7,21,13,2,2
+7,21,14,23,2
+7,21,14,23,2
+7,21,15,41,2
+7,21,16,54,2
+7,21,16,54,2
+7,21,17,45,3
+7,22,12,28,3
+7,22,15,35,2
+7,22,15,35,2
+7,22,18,59,3
+7,22,18,59,3
+7,23,12,32,2
+7,23,12,32,2
+7,23,16,7,2
+7,23,16,7,2
+7,23,16,7,2
+7,23,16,7,2
+7,23,16,7,2
+7,24,12,4,0
+7,24,12,4,0
+7,24,12,4,1
+7,24,14,38,2
+7,24,14,38,2
+7,24,18,54,3
+7,25,12,31,0
+7,25,12,32,1
+7,25,12,32,1
+7,25,15,6,3
+7,25,18,56,3
+7,26,13,41,2
+7,26,19,14,3
+7,27,11,39,2
+7,27,11,39,3
+7,27,11,46,3
+7,27,11,46,2
+7,27,13,8,2
+7,27,13,8,2
+7,27,13,9,2
+7,27,13,45,2
+7,27,13,45,2
+7,27,15,38,3
+7,28,12,12,2
+7,28,12,13,2
+7,28,12,41,2
+7,28,12,41,2
+7,28,12,41,2
+7,28,14,0,1
+7,28,14,0,2
+7,28,15,21,3
+7,28,18,56,3
+7,29,10,9,1
+7,29,10,9,1
+7,29,10,9,1
+7,29,11,54,0
+7,29,11,54,0
+7,29,11,54,0
+7,29,11,54,1
+7,29,14,10,2
+7,29,16,44,2
+7,29,16,44,2
+7,30,16,7,3
+7,30,18,45,3
+7,31,13,2,0
+7,31,13,2,1
+7,31,13,3,1
+7,31,13,3,1
+7,31,13,3,1
+7,31,18,39,3
+8,1,12,22,0
+8,1,12,22,1
+8,1,14,20,2
+8,1,14,20,2
+8,1,14,20,2
+8,1,15,55,3
+8,1,18,31,3
+8,1,18,37,3
+8,1,18,37,3
+8,1,19,2,3
+8,1,19,2,3
+8,1,20,5,3
+8,2,10,9,2
+8,2,10,9,1
+8,2,10,9,2
+8,2,10,9,2
+8,2,13,58,2
+8,2,13,58,2
+8,2,15,44,3
+8,2,15,44,3
+8,2,15,44,3
+8,2,17,21,3
+8,2,17,21,3
+8,2,17,21,3
+8,3,13,31,1
+8,3,13,31,2
+8,3,13,32,2
+8,3,16,43,3
+8,4,13,20,1
+8,4,13,20,2
+8,4,18,27,3
+8,5,13,37,2
+8,5,13,37,2
+8,5,18,33,3
+8,6,11,24,3
+8,6,11,24,3
+8,6,11,24,3
+8,6,13,50,3
+8,7,13,4,2
+8,7,13,4,2
+8,7,14,56,3
+8,8,12,13,2
+8,8,12,13,2
+8,8,15,51,2
+8,8,15,51,2
+8,8,15,51,3
+8,9,13,32,2
+8,9,13,32,2
+8,9,13,32,2
+8,9,15,8,2
+8,9,15,8,2
+8,9,15,8,2
+8,9,16,19,2
+8,10,11,32,0
+8,10,11,32,1
+8,10,11,32,1
+8,10,13,13,1
+8,10,13,13,1
+8,10,13,13,2
+8,10,16,42,3
+8,10,16,42,3
+8,11,14,6,2
+8,11,14,7,2
+8,11,18,54,3
+8,11,18,54,3
+8,11,18,54,3
+8,12,12,27,1
+8,12,12,27,1
+8,12,12,28,1
+8,12,13,53,2
+8,12,13,53,2
+8,12,13,53,2
+8,12,15,21,3
+8,13,13,16,1
+8,13,13,16,1
+8,13,13,16,1
+8,13,14,14,2
+8,13,14,14,2
+8,13,16,11,3
+8,13,17,18,3
+8,14,13,7,1
+8,14,13,7,1
+8,14,13,7,1
+8,14,13,7,1
+8,14,13,7,2
+8,14,13,7,2
+8,14,15,6,3
+8,15,14,5,2
+8,15,14,5,2
+8,15,14,6,2
+8,15,14,6,2
+8,15,16,41,3
+8,15,16,41,3
+8,15,17,30,3
+8,16,13,40,2
+8,16,13,40,2
+8,16,17,52,3
+8,16,17,53,3
+8,17,13,34,1
+8,17,13,35,2
+8,17,14,7,2
+8,17,19,2,3
+8,18,10,21,3
+8,18,11,14,2
+8,18,11,14,2
+8,18,11,14,2
+8,18,11,14,2
+8,18,14,25,2
+8,18,14,25,3
+8,18,14,25,2
+8,18,18,18,3
+8,18,18,19,3
+8,19,18,33,3
+8,19,18,33,3
+8,19,18,33,3
+8,19,18,33,3
+8,20,14,28,2
+8,20,14,28,2
+8,20,14,28,2
+8,20,14,28,2
+8,20,17,8,3
+8,20,18,22,3
+8,21,11,24,1
+8,21,11,24,1
+8,21,11,24,1
+8,21,15,34,3
+8,21,18,55,3
+8,22,12,3,1
+8,22,12,4,2
+8,22,12,4,2
+8,22,13,51,2
+8,22,13,51,2
+8,22,13,51,2
+8,22,18,12,3
+8,22,18,12,3
+8,22,18,12,3
+8,22,18,12,3
+8,22,18,40,3
+8,22,18,40,3
+8,23,13,42,1
+8,23,13,42,1
+8,23,17,32,3
+8,23,19,28,3
+8,23,20,27,3
+8,23,20,27,3
+8,23,21,49,3
+8,24,14,0,2
+8,24,14,0,2
+8,24,14,0,2
+8,24,14,0,2
+8,24,15,4,3
+8,24,15,4,3
+8,24,16,2,3
+8,24,16,3,3
+8,24,16,37,3
+8,24,17,9,3
+8,24,17,14,3
+8,25,13,34,1
+8,25,13,34,1
+8,25,13,34,1
+8,25,13,34,1
+8,25,13,34,1
+8,25,15,1,3
+8,25,17,58,3
+8,26,10,29,0
+8,26,10,29,0
+8,26,10,29,0
+8,26,10,29,0
+8,26,10,29,0
+8,26,16,42,3
+8,26,16,42,3
+8,26,18,41,3
+8,26,18,41,3
+8,27,13,41,2
+8,27,13,41,2
+8,27,13,41,2
+8,27,13,41,2
+8,27,17,42,3
+8,28,11,9,1
+8,28,11,9,1
+8,28,12,14,0
+8,28,12,14,1
+8,28,12,14,0
+8,28,15,3,2
+8,28,15,3,2
+8,28,16,31,3
+8,28,17,40,3
+8,29,14,44,3
+8,29,17,25,3
+8,30,12,5,0
+8,30,12,5,0
+8,30,12,5,0
+8,30,13,32,1
+8,30,13,32,1
+8,30,13,56,2
+8,30,14,23,2
+8,30,14,23,2
+8,30,14,23,2
+8,30,14,23,2
+8,30,14,41,2
+8,30,14,41,2
+8,30,14,41,2
+8,30,15,50,3
+8,30,17,0,3
+8,30,18,59,3
+8,30,18,59,3
+8,31,14,31,2
+8,31,14,31,2
+8,31,14,31,2
+8,31,17,59,3
+8,31,18,0,3
+9,1,16,13,3
+9,1,16,13,3
+9,1,16,13,3
+9,1,17,41,3
+9,2,13,44,1
+9,2,13,44,1
+9,2,13,44,1
+9,2,14,49,2
+9,2,14,49,2
+9,2,14,49,2
+9,2,16,6,3
+9,2,16,6,3
+9,2,17,2,3
+9,3,16,9,3
+9,3,17,35,3
+9,3,17,36,3
+9,4,12,57,1
+9,4,12,57,1
+9,4,15,8,3
+9,4,15,34,3
+9,4,16,26,3
+9,4,16,26,3
+9,4,18,37,3
+9,4,18,37,3
+9,4,18,37,3
+9,6,11,18,0
+9,6,11,18,0
+9,6,12,54,1
+9,6,12,54,1
+9,6,14,21,2
+9,6,14,21,2
+9,6,19,20,3
+9,7,11,50,0
+9,7,14,17,2
+9,7,14,57,3
+9,7,14,57,3
+9,7,16,56,3
+9,7,16,56,3
+9,7,16,56,3
+9,7,16,56,3
+9,7,18,38,3
+9,7,18,38,3
+9,8,11,4,2
+9,8,11,4,2
+9,8,11,13,0
+9,8,11,13,0
+9,8,11,13,0
+9,8,11,13,0
+9,8,11,13,0
+9,8,11,14,0
+9,8,11,14,1
+9,8,11,14,1
+9,8,12,1,0
+9,8,12,1,0
+9,8,12,1,0
+9,8,12,1,0
+9,8,12,1,0
+9,8,12,1,1
+9,8,12,36,0
+9,8,12,36,0
+9,8,12,36,0
+9,8,12,36,0
+9,8,12,36,0
+9,8,13,37,1
+9,8,13,37,1
+9,8,13,37,1
+9,8,14,20,2
+9,8,14,20,2
+9,8,18,20,3
+9,9,12,47,1
+9,9,12,47,2
+9,9,12,47,2
+9,9,19,5,3
+9,10,13,15,1
+9,10,13,15,1
+9,10,13,15,0
+9,10,16,49,3
+9,10,19,6,3
+9,10,21,5,3
+9,11,14,16,2
+9,11,14,16,2
+9,11,14,16,2
+9,11,18,41,3
+9,12,14,43,2
+9,12,14,43,2
+9,12,14,43,2
+9,12,16,14,3
+9,12,17,12,3
+9,12,17,12,2
+9,12,17,12,3
+9,12,17,12,2
+9,12,20,44,3
+9,13,19,52,3
+9,14,14,39,2
+9,14,14,39,2
+9,14,15,14,3
+9,14,17,29,3
+9,14,17,29,3
+9,14,17,29,3
+9,15,11,41,1
+9,15,11,41,1
+9,15,13,4,1
+9,15,14,3,1
+9,15,14,3,2
+9,16,12,36,1
+9,16,12,36,1
+9,16,12,36,1
+9,16,12,36,1
+9,16,12,48,1
+9,16,12,48,1
+9,16,13,51,1
+9,16,13,51,2
+9,16,13,51,1
+9,16,15,13,3
+9,16,15,14,3
+9,16,15,14,3
+9,17,10,27,0
+9,17,10,27,0
+9,17,11,10,0
+9,17,11,10,0
+9,17,11,10,0
+9,17,12,43,1
+9,17,12,43,1
+9,17,12,43,1
+9,17,13,32,1
+9,17,13,32,1
+9,17,14,5,1
+9,17,14,5,2
+9,17,14,6,2
+9,17,15,7,3
+9,17,15,49,3
+9,17,15,49,3
+9,17,18,12,3
+9,17,18,13,3
diff --git a/eraser-base/build.gradle b/eraser-base/build.gradle
index 2d0b1f8e78a2333cf594e8732e9ba30657a78db2..fbe5f76ec7b7097ca4ef1ca48181b4c26eb71433 100644
--- a/eraser-base/build.gradle
+++ b/eraser-base/build.gradle
@@ -118,6 +118,7 @@ task copyRagdoc(type: Copy, dependsOn: cleanRagdoc) {
 }
 
 generateAst.dependsOn preprocess
+generateAst.inputs.files file("./src/main/jastadd/mainGen.ast"), file("./src/main/jastadd/mainGen.jadd")
 //compileJava.dependsOn jastadd
 //
 //// always run jastadd
diff --git a/eraser-base/src/main/jastadd/Item.jrag b/eraser-base/src/main/jastadd/Item.jrag
index c143c2bbdc23e9a0a3035f7293af1700baee740c..0b370142cf57c377775294bb6c758dafa7db036f 100644
--- a/eraser-base/src/main/jastadd/Item.jrag
+++ b/eraser-base/src/main/jastadd/Item.jrag
@@ -10,12 +10,19 @@ aspect ItemHandling {
   public void Item.enableSendState() { sendState = true; }
   public final boolean Item.isSendState() { return sendState; }
 
+  //--- DateTimeItem.ALTERNATIVE_FORMAT ---
+  private static final java.time.format.DateTimeFormatter DateTimeItem.ALTERNATIVE_FORMAT = new java.time.format.DateTimeFormatterBuilder()
+    .appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
+    .toFormatter()
+    .withZone(java.time.ZoneId.of("UTC"));
+
   //--- getStateAsString ---
   syn String Item.getStateAsString();
   eq ColorItem.getStateAsString() = getState().toString();
   eq DateTimeItem.getStateAsString() = getState().toString();
   eq ItemWithBooleanState.getStateAsString() = Boolean.toString(getState());
   eq SwitchItem.getStateAsString() = getState() ? "ON" : "OFF";
+  eq ContactItem.getStateAsString() = getState() ? "OPEN" : "CLOSED";
   eq ItemWithDoubleState.getStateAsString() = Double.toString(getState());
   eq ItemWithStringState.getStateAsString() = getState();
 
@@ -50,19 +57,24 @@ aspect ItemHandling {
     }
   }
   public void DateTimeItem.setStateFromString(String value) {
-    try{
+    Exception exception = null;
+    // try normal instant parsing. Format example: 2019-07-22T12:58:08.960Z
+    try {
       this.setState(Instant.parse(value));
-    } catch (java.time.format.DateTimeParseException e1) {
-      // try to read input as number and use that
-      try {
-        long time = Long.parseLong(value);
-        this.setStateFromLong(time);
-        // exit the method to avoid printing the error message for e1
-        return;
-      } catch (NumberFormatException e2) {
-        logger.catching(e2);
-      }
-      logger.catching(e1);
+      return;
+    } catch (java.time.format.DateTimeParseException e) { /* empty */ }
+    // try openHAB parsing. Format example: 2019-07-22T12:58:08.960+0000
+    try {
+      this.setState(ALTERNATIVE_FORMAT.parse(value, Instant::from));
+      return;
+    } catch (java.time.format.DateTimeParseException e) { /* empty */ }
+    // try to read input as number and use that
+    try {
+      long time = Long.parseLong(value);
+      this.setStateFromLong(time);
+      return;
+    } catch (NumberFormatException e) {
+      logger.warn("Could not parse date value from {}", value);
     }
   }
   public void ItemWithBooleanState.setStateFromString(String value) {
@@ -75,6 +87,20 @@ aspect ItemHandling {
       default: super.setStateFromString(value);
     }
   }
+  public void ContactItem.setStateFromString(String value) {
+    switch (value) {
+      case "OPEN": this.setState(true); break;
+      case "CLOSED": this.setState(false); break;
+      default: super.setStateFromString(value);
+    }
+  }
+  public void RollerShutterItem.setStateFromString(String value) {
+    switch (value) {
+      case "UP": this.setState(0); break;
+      case "DOWN": this.setState(100); break;
+      default: super.setStateFromString(value);
+    }
+  }
   public void ItemWithDoubleState.setStateFromString(String value) {
     this.setState(Double.parseDouble(value));
   }
@@ -288,7 +314,7 @@ aspect ItemHandling {
   //--- sendState ---
   protected void Item.sendState() throws Exception {
     for (MachineLearningModel model : getRelevantInMachineLearningModels()) {
-      model.getEncoder().newData(getRoot(), java.util.Collections.singletonList(this));
+      model.getEncoder().newData(Collections.singletonList(this));
     }
   }
 
diff --git a/eraser-base/src/main/jastadd/Logging.jadd b/eraser-base/src/main/jastadd/Logging.jadd
index dd41bc70f125081ea2ab6291ae48fa0272eea4c4..710bd79a7bce048213ce0d52bb42cae5176b832a 100644
--- a/eraser-base/src/main/jastadd/Logging.jadd
+++ b/eraser-base/src/main/jastadd/Logging.jadd
@@ -1,12 +1,21 @@
 aspect Logging {
+  // Base
   protected org.apache.logging.log4j.Logger Item.logger = org.apache.logging.log4j.LogManager.getLogger(Item.class);
   protected org.apache.logging.log4j.Logger ItemPreference.logger = org.apache.logging.log4j.LogManager.getLogger(ItemPreference.class);
-  protected org.apache.logging.log4j.Logger Neuron.logger = org.apache.logging.log4j.LogManager.getLogger(Neuron.class);
 
+  // MachineLearning
   private org.apache.logging.log4j.Logger DummyMachineLearningModel.logger = org.apache.logging.log4j.LogManager.getLogger(DummyMachineLearningModel.class);
-  private org.apache.logging.log4j.Logger Rule.logger = org.apache.logging.log4j.LogManager.getLogger(Rule.class);
-  private org.apache.logging.log4j.Logger MqttRoot.logger = org.apache.logging.log4j.LogManager.getLogger(MqttRoot.class);
-  private org.apache.logging.log4j.Logger InternalMachineLearningModel.logger = org.apache.logging.log4j.LogManager.getLogger(MachineLearningModel.class);
+  private org.apache.logging.log4j.Logger InternalMachineLearningModel.logger = org.apache.logging.log4j.LogManager.getLogger(InternalMachineLearningModel.class);
+  private org.apache.logging.log4j.Logger ExternalMachineLearningModel.logger = org.apache.logging.log4j.LogManager.getLogger(ExternalMachineLearningModel.class);
+
+  // NeuralNetwork
   private org.apache.logging.log4j.Logger NeuralNetworkRoot.logger = org.apache.logging.log4j.LogManager.getLogger(NeuralNetworkRoot.class);
   private org.apache.logging.log4j.Logger OutputLayer.logger = org.apache.logging.log4j.LogManager.getLogger(OutputLayer.class);
+  protected org.apache.logging.log4j.Logger Neuron.logger = org.apache.logging.log4j.LogManager.getLogger(Neuron.class);
+
+  // Rules
+  private org.apache.logging.log4j.Logger Rule.logger = org.apache.logging.log4j.LogManager.getLogger(Rule.class);
+
+  // MQTT
+  private org.apache.logging.log4j.Logger MqttRoot.logger = org.apache.logging.log4j.LogManager.getLogger(MqttRoot.class);
 }
diff --git a/eraser-base/src/main/jastadd/MachineLearning.jrag b/eraser-base/src/main/jastadd/MachineLearning.jrag
index e5fc2f6f3e8c2dd8e9cb17c38d1dfd2c88f4a465..e584d8f2f6b9f1b2b0ce140a46c005b32887e1dd 100644
--- a/eraser-base/src/main/jastadd/MachineLearning.jrag
+++ b/eraser-base/src/main/jastadd/MachineLearning.jrag
@@ -112,7 +112,8 @@ aspect MachineLearning {
 
   @Override
   public boolean ExternalMachineLearningModel.check() {
-    throw new UnsupportedOperationException("check not available for external ML models (yet)!");
+    logger.warn("check not available for external ML models (yet)!");
+    return true;
   }
 
   //--- mlKind ---
@@ -160,7 +161,33 @@ aspect MachineLearning {
     return this.decoder;
   }
 
-  // refine Item.stateUpdated
+}
+
+aspect ChangeEvents {
+  private static final java.util.concurrent.atomic.AtomicInteger ChangeEvent.idCounter = new java.util.concurrent.atomic.AtomicInteger(0);
+
+  //--- createRecognitionEvent ---
+  public static RecognitionEvent RecognitionEvent.createRecognitionEvent(MachineLearningModel modelOfRecognition) {
+    RecognitionEvent result = new RecognitionEvent();
+    result.initChangeEvent();
+    for (Item relevantItem : modelOfRecognition.getRelevantItems()) {
+      result.addChangedItem(ChangedItem.newFromItem(relevantItem));
+    }
+    return result;
+  }
 
+  //--- newFromItem ---
+  public static ChangedItem ChangedItem.newFromItem(Item source) {
+    ChangedItem result = new ChangedItem();
+    result.setItem(source);
+    result.setNewStateAsString(source.getStateAsString());
+    return result;
+  }
+
+  //--- initChangeEvent ---
+  protected void ChangeEvent.initChangeEvent() {
+    this.setCreated(Instant.now());
+    this.setIdentifier(idCounter.incrementAndGet());
+  }
 
 }
diff --git a/eraser-base/src/main/jastadd/MachineLearning.relast b/eraser-base/src/main/jastadd/MachineLearning.relast
index b31dacb02aea2143c22828f9d6fa15d24ad9c545..906d344b8f123fca5d617b174078dcfa56f7f4c8 100644
--- a/eraser-base/src/main/jastadd/MachineLearning.relast
+++ b/eraser-base/src/main/jastadd/MachineLearning.relast
@@ -3,7 +3,7 @@ MachineLearningRoot ::= [ActivityRecognition:MachineLearningModel] [PreferenceLe
 
 Activity ::= <Identifier:int> <Label:String> ;
 
-abstract ChangeEvent ::= <Identifier:int> <Timestamp:long> ChangedItem* ;
+abstract ChangeEvent ::= <Identifier:int> <Created:Instant> ChangedItem* ;
 
 ChangedItem ::= <NewStateAsString:String> ;
 rel ChangedItem.Item -> Item ;
diff --git a/eraser-base/src/main/jastadd/Printing.jrag b/eraser-base/src/main/jastadd/Printing.jrag
index 53206bc16b2a09708a33386393ade1f3310e1666..7402973f563eb21924f1f54a54ae8dc6d2bea848 100644
--- a/eraser-base/src/main/jastadd/Printing.jrag
+++ b/eraser-base/src/main/jastadd/Printing.jrag
@@ -207,4 +207,29 @@ aspect Printing {
         .build();
   }
 
+// Expressions
+  syn String ParenthesizedNumberExpression.prettyPrint() = "(" + getOperand().prettyPrint() + ")";
+  syn String NumberLiteralExpression.prettyPrint() = Double.toString(getValue());
+  syn String AddExpression.prettyPrint() = "(" + getLeftOperand().prettyPrint() + " + " + getRightOperand().prettyPrint() + ")";
+  syn String SubExpression.prettyPrint() = "(" + getLeftOperand().prettyPrint() + " - " + getRightOperand().prettyPrint() + ")";
+  syn String MultExpression.prettyPrint() = "(" + getLeftOperand().prettyPrint() + " * " + getRightOperand().prettyPrint() + ")";
+  syn String DivExpression.prettyPrint() = "(" + getLeftOperand().prettyPrint() + " / " + getRightOperand().prettyPrint() + ")";
+  syn String PowerExpression.prettyPrint() = "(" + getLeftOperand().prettyPrint() + " ^ " + getRightOperand().prettyPrint() + ")";
+  syn String ParenthesizedLogicalExpression.prettyPrint()  = "(" + getOperand().prettyPrint() + ")";
+  syn String NotExpression.prettyPrint()  = "!" + getOperand().prettyPrint();
+  syn String ComparingExpression.prettyPrint() {
+    switch (getComparator()) {
+      case NotEquals: return "(" + getLeftOperand().prettyPrint() + " != " + getRightOperand().prettyPrint() + ")";
+      case Equals: return "(" + getLeftOperand().prettyPrint() + " == " + getRightOperand().prettyPrint() + ")";
+      case LessThan: return "(" + getLeftOperand().prettyPrint() + " < " + getRightOperand().prettyPrint() + ")";
+      case GreaterThan: return "(" + getLeftOperand().prettyPrint() + " > " + getRightOperand().prettyPrint() + ")";
+      case LessOrEqualThan: return "(" + getLeftOperand().prettyPrint() + " <= " + getRightOperand().prettyPrint() + ")";
+      case GreaterOrEqualThan: return "(" + getLeftOperand().prettyPrint() + " >= " + getRightOperand().prettyPrint() + ")";
+      default: throw new IllegalArgumentException("Unknown compartor type: " + getComparator());
+    }
+  }
+  syn String AndExpression.prettyPrint() = "(" + getLeftOperand().prettyPrint() + " & " + getRightOperand().prettyPrint() + ")";
+  syn String OrExpression.prettyPrint() = "(" + getLeftOperand().prettyPrint() + " | " + getRightOperand().prettyPrint() + ")";
+  syn String Designator.prettyPrint() = getItem().getID();
+
 }
diff --git a/eraser-base/src/main/jastadd/Util.jrag b/eraser-base/src/main/jastadd/Util.jrag
index 282a44413c80ee2b5c5d71dca179ce4cf45c1fde..b038ca0dfae51d7bbea748086965b78e40f0c3e6 100644
--- a/eraser-base/src/main/jastadd/Util.jrag
+++ b/eraser-base/src/main/jastadd/Util.jrag
@@ -6,6 +6,7 @@ aspect Util {
 //  }
   public void MqttRoot.setHostByName(String hostName) {
     setHost(ExternalHost.of(hostName, DEFAULT_PORT));
+    flushCache();
   }
 
   public void InfluxRoot.setHostByName(String hostName) {
diff --git a/eraser-base/src/main/jastadd/eraser.flex b/eraser-base/src/main/jastadd/eraser.flex
index 2bd49e50fdfadebce430f728fa056be76573e8d6..bc9b3e8d9a41c9bd4cc51d1879f081b32538f103 100644
--- a/eraser-base/src/main/jastadd/eraser.flex
+++ b/eraser-base/src/main/jastadd/eraser.flex
@@ -106,7 +106,7 @@ Comment = "//" [^\n\r]+
 "<="           { return sym(Terminals.LE); }
 "=="           { return sym(Terminals.EQ); }
 "!="           { return sym(Terminals.NE); }
-"=>"           { return sym(Terminals.GE); }
+">="           { return sym(Terminals.GE); }
 ">"            { return sym(Terminals.GT); }
 "+"            { return sym(Terminals.PLUS); }
 "*"            { return sym(Terminals.MULT); }
diff --git a/eraser-base/src/main/jastadd/mqtt.jrag b/eraser-base/src/main/jastadd/mqtt.jrag
index ee7e06e00e5979a416ab300cf5163cc731af2072..b3f9c2a24a0a62ccc1f360fdadaad4cd7bafe3b5 100644
--- a/eraser-base/src/main/jastadd/mqtt.jrag
+++ b/eraser-base/src/main/jastadd/mqtt.jrag
@@ -74,4 +74,14 @@ aspect MQTT {
     getMqttRoot().getMqttSender().publish(getOutgoingTopic(), message);
   }
 
+  refine OpenHAB2 public void OpenHAB2Model.addNewItem(Item item) {
+    refined(item);
+    // update mqtt-topic to new mqtt-root
+    JavaUtils.ifPresentOrElse(
+        getRoot().getMqttRoot().resolveTopicSuffix(item.getTopic().getTopicString()),
+        topic -> item.setTopic(topic),
+        () -> de.tudresden.inf.st.eraser.util.ParserUtils.createMqttTopic(item, item.getTopic().getTopicString(), getRoot())
+    );
+  }
+
 }
diff --git a/eraser-base/src/main/jastadd/openhab.jrag b/eraser-base/src/main/jastadd/openhab.jrag
index 6d30e4b3e0fb91225c9e8ea08bfdf3ab1afb1357..56aa89f36ac62aa817352f45a639ae7c4aa62206 100644
--- a/eraser-base/src/main/jastadd/openhab.jrag
+++ b/eraser-base/src/main/jastadd/openhab.jrag
@@ -2,4 +2,12 @@ aspect OpenHAB2 {
   syn ActivityItem OpenHAB2Model.getActivityItem() {
     return new ActivityItem();
   }
+
+  public void OpenHAB2Model.addNewItem(Item item) {
+    JavaUtils.ifPresentOrElse(
+        resolveGroup(de.tudresden.inf.st.eraser.util.ParserUtils.UNKNOWN_GROUP_NAME),
+        group -> group.addItem(item),
+        () -> de.tudresden.inf.st.eraser.util.ParserUtils.createUnknownGroup(this, Collections.singletonList(item)));
+  }
+
 }
diff --git a/eraser-base/src/main/jastadd/openhab.relast b/eraser-base/src/main/jastadd/openhab.relast
index 7d7d9afa27f9f9998f6c5bd4b9822f0dfa774e8d..575f875734994ee52ba5259e5cfe570aa488c139 100644
--- a/eraser-base/src/main/jastadd/openhab.relast
+++ b/eraser-base/src/main/jastadd/openhab.relast
@@ -40,7 +40,7 @@ ImageItem : ItemWithStringState ;
 LocationItem : ItemWithStringState ;
 NumberItem : ItemWithDoubleState ;
 PlayerItem : ItemWithStringState ;
-RollerShutterItem : ItemWithBooleanState ;
+RollerShutterItem : ItemWithDoubleState ;
 StringItem : ItemWithStringState ;
 SwitchItem : ItemWithBooleanState ;
 DefaultItem : ItemWithStringState ;
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/InternalMachineLearningHandler.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/InternalMachineLearningHandler.java
index 2c59f46ca48fc18afa7aa096571a19ef9bef4b44..75d2a1d8cfc28c0293f1d55cc4e6714a6e37818a 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/InternalMachineLearningHandler.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/InternalMachineLearningHandler.java
@@ -22,7 +22,12 @@ public class InternalMachineLearningHandler implements MachineLearningEncoder, M
   }
 
   @Override
-  public void newData(Root model, List<Item> changedItems) {
+  public void setKnowledgeBaseRoot(Root root) {
+    // ignored
+  }
+
+  @Override
+  public void newData(List<Item> changedItems) {
     logger.debug("Ignored new data of {}", changedItems);
   }
 
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningDecoder.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningDecoder.java
index a6e01fb945226bcf91e4bc94663c24b561f7cd6f..045c7695ba325429a3ba82a4e1319e0926aa043b 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningDecoder.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningDecoder.java
@@ -9,7 +9,7 @@ import java.time.Instant;
  * @author rschoene - Initial contribution
  */
 @SuppressWarnings("unused")
-public interface MachineLearningDecoder {
+public interface MachineLearningDecoder extends MachineLearningSetRoot {
 
   /**
    * Execute the machine learning model and returns the classification result.
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningEncoder.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningEncoder.java
index 8cf4d78fd92a2c18bd4914ab5b805db63995be85..23ca8959f468b8210c287b163a217a0224f7d283 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningEncoder.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningEncoder.java
@@ -1,8 +1,5 @@
 package de.tudresden.inf.st.eraser.jastadd.model;
 
-import de.tudresden.inf.st.eraser.jastadd.model.Item;
-import de.tudresden.inf.st.eraser.jastadd.model.Root;
-
 import java.util.List;
 
 /**
@@ -13,14 +10,13 @@ import java.util.List;
  * @author rschoene - Initial contribution
  */
 @SuppressWarnings("unused")
-public interface MachineLearningEncoder {
+public interface MachineLearningEncoder extends MachineLearningSetRoot {
 
   /**
    * Update when new data is available.
-   * @param model        The underlying model
    * @param changedItems A list of items whose state has changed
    */
-  void newData(Root model, List<Item> changedItems);
+  void newData(List<Item> changedItems);
 
   // to be discussed, in which form this is specified
 
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningSetRoot.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningSetRoot.java
new file mode 100644
index 0000000000000000000000000000000000000000..13fec09c243d0d15c4f5e41a8c8851321c26d5d5
--- /dev/null
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningSetRoot.java
@@ -0,0 +1,17 @@
+package de.tudresden.inf.st.eraser.jastadd.model;
+
+/**
+ * Common interface for both {@link MachineLearningDecoder} and {@link MachineLearningEncoder}.
+ *
+ * @author rschoene - Initial contribution
+ */
+public interface MachineLearningSetRoot {
+
+  /**
+   * Informs this handler of the knowledge base.
+   * This method is called before any other of the interface methods.
+   * @param root The root node of the knowledge base
+   */
+  void setKnowledgeBaseRoot(Root root);
+
+}
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java
index fe88455606c2bb7b6d78a877059077686edf12fc..5d1b1af27c4bf36e15768bd12facc02ca3a1e773 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java
@@ -7,7 +7,6 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import java.util.*;
-import java.util.Comparator;
 import java.util.function.BiConsumer;
 
 /**
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/MqttReceiver.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/MqttReceiver.java
index 1f013ea25872e57e452a603616e95126bdd69e11..5fa9ad6800b3964369d0a1f140db6a4c3e0d164f 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/MqttReceiver.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/MqttReceiver.java
@@ -133,6 +133,17 @@ public class MqttReceiver implements AutoCloseable {
     connection.connect(new Callback<Void>() {
       @Override
       public void onSuccess(Void value) {
+        connection.publish("components", "Eraser is listening".getBytes(), QoS.AT_LEAST_ONCE, false, new Callback<Void>() {
+          @Override
+          public void onSuccess(Void value) {
+            logger.debug("success sending welcome message");
+          }
+
+          @Override
+          public void onFailure(Throwable value) {
+            logger.debug("failure sending welcome message", value);
+          }
+        });
         Topic[] topicArray = Arrays.stream(topics).map(topicName -> new Topic(topicName, qos)).toArray(Topic[]::new);
         logger.info("Connected, subscribing to {} topic(s) now.", topicArray.length);
         connection.subscribe(topicArray, new Callback<byte[]>() {
@@ -150,7 +161,7 @@ public class MqttReceiver implements AutoCloseable {
 
           @Override
           public void onFailure(Throwable cause) {
-            logger.error("Could not subscribe, because {}", cause);
+            logger.error("Could not subscribe", cause);
           }
         });
       }
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/ParserUtils.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/ParserUtils.java
index c45f02562fa72036b24749ab4fdca47fbf87ed41..716f63f9caa9462665b8819c9347aef466637a76 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/ParserUtils.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/ParserUtils.java
@@ -241,6 +241,7 @@ public class ParserUtils {
     EraserScanner scanner = new EraserScanner(reader);
     EraserParser parser = new EraserParser();
     Root root = (Root) parser.parse(scanner);
+    parser.resolveReferences();
     reader.close();
     int size = root.getOpenHAB2Model().items().size();
     if (size == 0) {
diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ExpressionEvalTest.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ExpressionEvalTest.java
index d9c64c57553133162dc2a355360f50fc3716cf33..1758931346632a63c9f3297912b1fb7d1430da46 100644
--- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ExpressionEvalTest.java
+++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ExpressionEvalTest.java
@@ -73,6 +73,19 @@ public class ExpressionEvalTest {
     assertThat(divExpression.getRightOperand().eval(), equalTo(4.0));
   }
 
+  @Test
+  public void expressionWithItem() throws IOException, Parser.Exception {
+    double itemValue = 5.3;
+    Item referenceItem = ParserUtils.parseItem("Number Item: id=\"myItem\" state=\"" + itemValue + "\";");
+    NumberExpression sut = ParserUtils.parseNumberExpression("(myItem * 3)", referenceItem.getRoot());
+    assertThat(sut.eval(), equalTo(itemValue * 3));
+
+    // set item state to new value
+    itemValue = 17;
+    referenceItem.setStateFromDouble(itemValue);
+    assertThat(sut.eval(), equalTo(itemValue * 3));
+  }
+
   @Test
   public void comparingExpressions() throws IOException, Parser.Exception {
     comparingExpression(1, "<",  2, true);
@@ -89,9 +102,9 @@ public class ExpressionEvalTest {
     comparingExpression(7, "!=", 8, true);
     comparingExpression(8, "!=", 8, false);
 
-    comparingExpression(9, "=>", 10, false);
-    comparingExpression(10, "=>", 10, true);
-    comparingExpression(11, "=>", 10, true);
+    comparingExpression(9, ">=", 10, false);
+    comparingExpression(10, ">=", 10, true);
+    comparingExpression(11, ">=", 10, true);
 
     comparingExpression(11,">",   12, false);
     comparingExpression(12,">",   12, false);
@@ -99,7 +112,8 @@ public class ExpressionEvalTest {
   }
 
   private void comparingExpression(double left, String actualComparatorString, double right, boolean expectedResult) throws IOException, Parser.Exception {
-    LogicalExpression sut = ParserUtils.parseLogicalExpression(String.format("(%f %s %f)", left, actualComparatorString, right));
+    String expression = String.format("(%s %s %s)", Double.toString(left), actualComparatorString, Double.toString(right));
+    LogicalExpression sut = ParserUtils.parseLogicalExpression(expression);
     assertThat(sut.eval(), equalTo(expectedResult));
   }
 
diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ExpressionParserTest.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ExpressionParserTest.java
index c01d93df0fe1e259b3be5d7f27e0c80a6e3ba2f6..a034d3c8f8699046c9c89d2f139f14880a80b704 100644
--- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ExpressionParserTest.java
+++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ExpressionParserTest.java
@@ -19,9 +19,11 @@ import static org.junit.Assert.assertThat;
  */
 public class ExpressionParserTest {
 
+  private static final String TRUE_EXPRESSION = "(0.0==0.0)";
+
   @Test
   public void plusExpression() throws IOException, Parser.Exception {
-    NumberExpression sut = ParserUtils.parseNumberExpression("(3 + 4)");
+    NumberExpression sut = parseWithRoundTripNumberExpression("(3 + 4)");
     assertThat(sut, instanceOf(AddExpression.class));
     AddExpression addExpression = (AddExpression) sut;
     assertThat(addExpression.getLeftOperand(), instanceOf(NumberLiteralExpression.class));
@@ -34,7 +36,7 @@ public class ExpressionParserTest {
 
   @Test
   public void minusExpression() throws IOException, Parser.Exception {
-    NumberExpression sut = ParserUtils.parseNumberExpression("(12.5 - 4.1)");
+    NumberExpression sut = parseWithRoundTripNumberExpression("(12.5 - 4.1)");
     assertThat(sut, instanceOf(SubExpression.class));
     SubExpression subExpression = (SubExpression) sut;
     assertThat(subExpression.getLeftOperand(), instanceOf(NumberLiteralExpression.class));
@@ -47,7 +49,7 @@ public class ExpressionParserTest {
 
   @Test
   public void multExpression() throws IOException, Parser.Exception {
-    NumberExpression sut = ParserUtils.parseNumberExpression("(0 * 0)");
+    NumberExpression sut = parseWithRoundTripNumberExpression("(0 * 0)");
     assertThat(sut, instanceOf(MultExpression.class));
     MultExpression multExpression = (MultExpression) sut;
     assertThat(multExpression.getLeftOperand(), instanceOf(NumberLiteralExpression.class));
@@ -60,7 +62,7 @@ public class ExpressionParserTest {
 
   @Test
   public void divExpression() throws IOException, Parser.Exception {
-    NumberExpression sut = ParserUtils.parseNumberExpression("(1.1 / 0.0)");
+    NumberExpression sut = parseWithRoundTripNumberExpression("(1.1 / 0.0)");
     assertThat(sut, instanceOf(DivExpression.class));
     DivExpression divExpression = (DivExpression) sut;
     assertThat(divExpression.getLeftOperand(), instanceOf(NumberLiteralExpression.class));
@@ -73,7 +75,7 @@ public class ExpressionParserTest {
 
   @Test
   public void powerExpression() throws IOException, Parser.Exception {
-    NumberExpression sut = ParserUtils.parseNumberExpression("(3 ^ 0.5)");
+    NumberExpression sut = parseWithRoundTripNumberExpression("(3 ^ 0.5)");
     assertThat(sut, instanceOf(PowerExpression.class));
     PowerExpression powExpression = (PowerExpression) sut;
     assertThat(powExpression.getLeftOperand(), instanceOf(NumberLiteralExpression.class));
@@ -86,7 +88,7 @@ public class ExpressionParserTest {
 
   @Test
   public void parenthesizedExpression() throws IOException, Parser.Exception {
-    NumberExpression sut = ParserUtils.parseNumberExpression("(3)");
+    NumberExpression sut = parseWithRoundTripNumberExpression("(3)");
     assertThat(sut, instanceOf(ParenthesizedNumberExpression.class));
     ParenthesizedNumberExpression parenExpression = (ParenthesizedNumberExpression) sut;
     assertThat(parenExpression.getOperand(), instanceOf(NumberLiteralExpression.class));
@@ -96,7 +98,7 @@ public class ExpressionParserTest {
 
   @Test
   public void complexExpression() throws IOException, Parser.Exception {
-    NumberExpression sut = ParserUtils.parseNumberExpression("((3 + 4) * (1 / (12 - 8)))");
+    NumberExpression sut = parseWithRoundTripNumberExpression("((3 + 4) * (1 / (12 - 8)))");
     assertThat(sut, instanceOf(MultExpression.class));
     MultExpression multExpression = (MultExpression) sut;
 
@@ -130,13 +132,17 @@ public class ExpressionParserTest {
   }
 
   @Test
-  public void expressionWithItem() {
-    try {
-      ParserUtils.parseNumberExpression("(myItem * 3)");
-    } catch (IOException | Parser.Exception e) {
-      e.printStackTrace();
-      Assert.fail(e.getMessage());
-    }
+  public void expressionWithItem() throws IOException, Parser.Exception {
+    Item referenceItem = ParserUtils.parseItem("Number Item: id=\"myItem\";");
+    NumberExpression sut = parseWithRoundTripNumberExpression("(myItem * 3)", referenceItem.getRoot());
+    assertThat(sut, instanceOf(MultExpression.class));
+    MultExpression multExpression = (MultExpression) sut;
+    assertThat(multExpression.getLeftOperand(), instanceOf(Designator.class));
+    Designator left = (Designator) multExpression.getLeftOperand();
+    assertThat(left.getItem(), equalTo(referenceItem));
+    assertThat(multExpression.getRightOperand(), instanceOf(NumberLiteralExpression.class));
+    NumberLiteralExpression right = (NumberLiteralExpression) multExpression.getRightOperand();
+    assertThat(right.getValue(), equalTo(3.0));
   }
 
   @Test
@@ -145,12 +151,13 @@ public class ExpressionParserTest {
     comparingExpression("<=", ComparatorType.LessOrEqualThan, 3, 4);
     comparingExpression("==", ComparatorType.Equals, 5, 6);
     comparingExpression("!=", ComparatorType.NotEquals, 7, 8);
-    comparingExpression("=>", ComparatorType.GreaterOrEqualThan, 9, 10);
+    comparingExpression(">=", ComparatorType.GreaterOrEqualThan, 9, 10);
     comparingExpression(">",  ComparatorType.GreaterThan, 11, 12);
   }
 
   private void comparingExpression(String actualComparatorString, ComparatorType expectedComparatorType, double left, double right) throws IOException, Parser.Exception {
-    LogicalExpression sut = ParserUtils.parseLogicalExpression(String.format("(%f %s %f)", left, actualComparatorString, right));
+    String expression = String.format("(%s %s %s)", Double.toString(left), actualComparatorString, Double.toString(right));
+    LogicalExpression sut = parseWithRoundTripLogicalExpression(expression);
     assertThat(sut, instanceOf(ComparingExpression.class));
     ComparingExpression comparingExpression = (ComparingExpression) sut;
     assertThat(comparingExpression.getLeftOperand(), instanceOf(NumberLiteralExpression.class));
@@ -164,7 +171,7 @@ public class ExpressionParserTest {
 
   @Test
   public void notExpression() throws IOException, Parser.Exception {
-    LogicalExpression sut = ParserUtils.parseLogicalExpression("!(0==0)");
+    LogicalExpression sut = parseWithRoundTripLogicalExpression("!" + TRUE_EXPRESSION);
     assertThat(sut, instanceOf(NotExpression.class));
     NotExpression notExpression = (NotExpression) sut;
     checkZeroEqualsZero(notExpression.getOperand());
@@ -172,7 +179,7 @@ public class ExpressionParserTest {
 
   @Test
   public void andExpression() throws IOException, Parser.Exception {
-    LogicalExpression sut = ParserUtils.parseLogicalExpression("((0==0) & (0==0))");
+    LogicalExpression sut = parseWithRoundTripLogicalExpression("(" + TRUE_EXPRESSION + " & " + TRUE_EXPRESSION + ")");
     assertThat(sut, instanceOf(AndExpression.class));
     AndExpression notExpression = (AndExpression) sut;
     checkZeroEqualsZero(notExpression.getLeftOperand());
@@ -181,7 +188,7 @@ public class ExpressionParserTest {
 
   @Test
   public void orExpression() throws IOException, Parser.Exception {
-    LogicalExpression sut = ParserUtils.parseLogicalExpression("((0==0) | (0==0))");
+    LogicalExpression sut = parseWithRoundTripLogicalExpression("(" + TRUE_EXPRESSION + " | " + TRUE_EXPRESSION + ")");
     assertThat(sut, instanceOf(OrExpression.class));
     OrExpression notExpression = (OrExpression) sut;
     checkZeroEqualsZero(notExpression.getLeftOperand());
@@ -190,12 +197,34 @@ public class ExpressionParserTest {
 
   @Test
   public void parenthesizedLogicalExpression() throws IOException, Parser.Exception {
-    LogicalExpression sut = ParserUtils.parseLogicalExpression("((0==0))");
+    LogicalExpression sut = parseWithRoundTripLogicalExpression("(" + TRUE_EXPRESSION + ")");
     assertThat(sut, instanceOf(ParenthesizedLogicalExpression.class));
     ParenthesizedLogicalExpression parenthesizedLogicalExpression = (ParenthesizedLogicalExpression) sut;
     checkZeroEqualsZero(parenthesizedLogicalExpression.getOperand());
   }
 
+  private NumberExpression parseWithRoundTripNumberExpression(String numberExpression) throws IOException, Parser.Exception {
+    return parseWithRoundTripNumberExpression(numberExpression, null);
+  }
+
+  private NumberExpression parseWithRoundTripNumberExpression(String numberExpression, Root root) throws IOException, Parser.Exception {
+    NumberExpression sut = ParserUtils.parseNumberExpression(numberExpression, root);
+    String first = sut.prettyPrint();
+    NumberExpression reParsed = ParserUtils.parseNumberExpression(first, root);
+    String second = reParsed.prettyPrint();
+    assertThat(first, equalTo(second));
+    return sut;
+  }
+
+  private LogicalExpression parseWithRoundTripLogicalExpression(String logicalExpression) throws IOException, Parser.Exception {
+    LogicalExpression sut = ParserUtils.parseLogicalExpression(logicalExpression);
+    String first = sut.prettyPrint();
+    LogicalExpression reParsed = ParserUtils.parseLogicalExpression(first);
+    String second = reParsed.prettyPrint();
+    assertThat(first, equalTo(second));
+    return sut;
+  }
+
   private void checkZeroEqualsZero(LogicalExpression logicalExpression) {
     assertThat(logicalExpression, instanceOf(ComparingExpression.class));
     ComparingExpression comparingExpression = (ComparingExpression) logicalExpression;
diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/InfluxTest.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/InfluxTest.java
index a7d76202ffc30da22280f9a5ec95c643cb4aee42..9526a4db04802684261f820e807db35d6a47c24f 100644
--- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/InfluxTest.java
+++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/InfluxTest.java
@@ -33,8 +33,8 @@ public class InfluxTest {
   @ClassRule
   public static InfluxDBContainer influxDbContainer = new InfluxDBContainer()
       .withDatabase(InfluxRoot.createDefault().getDbName())
-      .withUsername(InfluxRoot.createDefault().getUser())
-      .withPassword(InfluxRoot.createDefault().getPassword());
+      .withAdmin(InfluxRoot.createDefault().getUser())
+      .withAdminPassword(InfluxRoot.createDefault().getPassword());
 
   @Test
   public void oneItem() {
@@ -154,9 +154,10 @@ public class InfluxTest {
           point -> points.add((DoubleStatePoint) point));
     } else {
       influxRoot = InfluxRoot.createDefault();
-      // use zih vm2098 running influx
+      // use container running influx
       influxRoot.setDbName(InfluxTest.class.getSimpleName());
-      influxRoot.setHostByName("vm2098.zih.tu-dresden.de");
+      System.out.println("ports: " + influxDbContainer.getPortBindings() + " url: '" + influxDbContainer.getUrl() + "'");
+      influxRoot.setHostByName(influxDbContainer.getUrl().replaceAll("^http://", ""));
     }
     mai.model.getRoot().setInfluxRoot(influxRoot);
     Assume.assumeTrue(influxRoot.influxAdapter().isConnected());
diff --git a/eraser-base/src/test/resources/tests/ppc3/input.eraser b/eraser-base/src/test/resources/tests/ppc3/input.eraser
index 5fad695027d88ad41935092e7a3175206a3dfb2d..9a8a80d0d47d21df28a233b13135c43a98be3f8a 100644
--- a/eraser-base/src/test/resources/tests/ppc3/input.eraser
+++ b/eraser-base/src/test/resources/tests/ppc3/input.eraser
@@ -14,7 +14,7 @@ Image Item : id="image1" label="an Image Item" state="def" topic="item/str/image
 Location Item : id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state";
 Number Item : id="number1" label="a Number Item" state="456" topic="item/double/number1/state";
 Player Item : id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state";
-RollerShutter Item : id="rollerShutter1" label="a RollerShutter Item" state="false" topic="item/str/rs1/state";
+RollerShutter Item : id="rollerShutter1" label="a RollerShutter Item" state="32" topic="item/str/rs1/state";
 String Item : id="string1" label="a String Item" state="mno" topic="item/str/string1/state";
 Switch Item : id="switch1" label="a Switch Item" state="true" topic="item/bool/switch1/state";
 Switch Item : id="switch2" label="a second Switch Item" state="OFF" topic="item/bool/switch2/state";
diff --git a/eraser-base/src/test/resources/tests/ppc3/output.eraser b/eraser-base/src/test/resources/tests/ppc3/output.eraser
index 9f209db2cbcac9ee3d862a7d005cfc159432a0a3..f480a5d4ecb8144e53e02334acf39b7e6b629868 100644
--- a/eraser-base/src/test/resources/tests/ppc3/output.eraser
+++ b/eraser-base/src/test/resources/tests/ppc3/output.eraser
@@ -1,5 +1,5 @@
 Color Item: id="color1" label="a Color Item" state="1,2,3" topic="item/hsb/color1/state" ;
-Contact Item: id="contact1" label="a Contact Item" state="true" topic="item/bool/contact1/state" ;
+Contact Item: id="contact1" label="a Contact Item" state="OPEN" topic="item/bool/contact1/state" ;
 Image Item: id="image1" label="an Image Item" state="def" topic="item/str/image1/state" ;
 Location Item: id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state" ;
 DateTime Item: id="datetime1" label="a DateTime Item" state="1970-01-18T20:43:35.826Z" topic="item/date/datetime1/state" ;
@@ -7,7 +7,7 @@ Item: id="default1" label="a Default Item" state="pqr" topic="item/str/default1/
 Dimmer Item: id="dimmer1" label="a Dimmer Item" state="123.0" topic="item/double/dimmer1/state" ;
 Player Item: id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state" ;
 Number Item: id="number1" label="a Number Item" state="456.0" topic="item/double/number1/state" ;
-RollerShutter Item: id="rollerShutter1" label="a RollerShutter Item" state="false" topic="item/str/rs1/state" ;
+RollerShutter Item: id="rollerShutter1" label="a RollerShutter Item" state="32.0" topic="item/str/rs1/state" ;
 String Item: id="string1" label="a String Item" state="mno" topic="item/str/string1/state" ;
 Switch Item: id="switch1" label="a Switch Item" state="ON" topic="item/bool/switch1/state" ;
 Switch Item: id="switch2" label="a second Switch Item" state="OFF" topic="item/bool/switch2/state" ;
diff --git a/eraser-base/src/test/resources/tests/ppc4/input.eraser b/eraser-base/src/test/resources/tests/ppc4/input.eraser
index f5c7afff39c0a2d617f293076a86a794fa24263f..8687f881951aa3bc8766e209a87432a235e2a72a 100644
--- a/eraser-base/src/test/resources/tests/ppc4/input.eraser
+++ b/eraser-base/src/test/resources/tests/ppc4/input.eraser
@@ -8,13 +8,13 @@ Group: id="my-empty-group" ;
 
 Color Item : id="color1" label="a Color Item" state="1,2,3" topic="item/hsb/color1/state";
 DateTime Item : id="datetime1" label="a DateTime Item" state="1543415826" topic="item/date/datetime1/state";
-Contact Item : id="contact1" label="a Contact Item" state="true" topic="item/bool/contact1/state";
+Contact Item : id="contact1" label="a Contact Item" state="CLOSED" topic="item/bool/contact1/state";
 Dimmer Item : id="dimmer1" label="a Dimmer Item" state="123" topic="item/double/dimmer1/state" controls=["color1", "datetime1"];
 Image Item : id="image1" label="an Image Item" state="def" topic="item/str/image1/state" controls=[];
 Location Item : id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state";
 Number Item : id="number1" label="a Number Item" state="456" topic="item/double/number1/state" controls=["string1"];
 Player Item : id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state";
-RollerShutter Item : id="rollerShutter1" label="a RollerShutter Item" state="false" topic="item/str/rs1/state";
+RollerShutter Item : id="rollerShutter1" label="a RollerShutter Item" state="0" topic="item/str/rs1/state";
 Activity Item: id="activity";
 String Item : id="string1" label="a String Item" state="mno" topic="item/str/string1/state";
 Switch Item : id="switch1" label="a Switch Item" state="true" topic="item/bool/switch1/state" controls=["rollerShutter1"];
diff --git a/eraser-base/src/test/resources/tests/ppc4/output.eraser b/eraser-base/src/test/resources/tests/ppc4/output.eraser
index 651bf7220435c60edee891b3a244a42cce706261..d4934300c2f7e3c0c8be65bf4f4932bbc4b7be52 100644
--- a/eraser-base/src/test/resources/tests/ppc4/output.eraser
+++ b/eraser-base/src/test/resources/tests/ppc4/output.eraser
@@ -1,5 +1,5 @@
 Color Item: id="color1" label="a Color Item" state="1,2,3" topic="item/hsb/color1/state" ;
-Contact Item: id="contact1" label="a Contact Item" state="true" topic="item/bool/contact1/state" ;
+Contact Item: id="contact1" label="a Contact Item" state="CLOSED" topic="item/bool/contact1/state" ;
 Image Item: id="image1" label="an Image Item" state="def" topic="item/str/image1/state" ;
 Location Item: id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state" ;
 DateTime Item: id="datetime1" label="a DateTime Item" state="1970-01-18T20:43:35.826Z" topic="item/date/datetime1/state" ;
@@ -7,7 +7,7 @@ Item: id="default1" label="a Default Item" state="pqr" topic="item/str/default1/
 Dimmer Item: id="dimmer1" label="a Dimmer Item" state="123.0" topic="item/double/dimmer1/state" controls=["color1", "datetime1"] ;
 Player Item: id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state" ;
 Number Item: id="number1" label="a Number Item" state="456.0" topic="item/double/number1/state" controls=["string1"] ;
-RollerShutter Item: id="rollerShutter1" label="a RollerShutter Item" state="false" topic="item/str/rs1/state" ;
+RollerShutter Item: id="rollerShutter1" label="a RollerShutter Item" state="0.0" topic="item/str/rs1/state" ;
 Activity Item: id="activity" ;
 String Item: id="string1" label="a String Item" state="mno" topic="item/str/string1/state" ;
 Switch Item: id="switch1" label="a Switch Item" state="ON" topic="item/bool/switch1/state" controls=["rollerShutter1"] ;
diff --git a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/Application.java b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/Application.java
index c1c8c2f40e4a3847e4dbfa7ea4b95a406df4d1d2..4d8df7dfaa448fe34c6cef1ed51a30d4dd2bc1ae 100644
--- a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/Application.java
+++ b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/Application.java
@@ -6,12 +6,10 @@ import de.tudresden.inf.st.eraser.util.JavaUtils;
 import de.tudresden.inf.st.eraser.util.ParserUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.eclipse.jetty.http.HttpStatus;
 import spark.Request;
 import spark.Response;
 import spark.Spark;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -41,7 +39,7 @@ public class Application {
   private void createRules() {
     ObjectMapper mapper = new ObjectMapper();
 
-    Spark.path("/", () -> Spark.before((request, response) -> logger.debug(request.pathInfo())));
+    Spark.path("/", () -> Spark.before((request, response) -> logger.debug("{}: {}", request.pathInfo(), request.body())));
 
     Spark.path("/activity", () -> {
 
@@ -116,13 +114,12 @@ public class Application {
             OpenHAB2Model openHAB2Model = root.getOpenHAB2Model();
             Item item = ParserUtils.parseItem(request.body());
             if (!openHAB2Model.resolveItem(item.getID()).isPresent()) {
-              JavaUtils.ifPresentOrElse(
-                  root.getOpenHAB2Model().resolveGroup(ParserUtils.UNKNOWN_GROUP_NAME),
-                  group -> group.addItem(item),
-                  () -> ParserUtils.createUnknownGroup(root.getOpenHAB2Model(), Collections.singletonList(item)));
+              root.getOpenHAB2Model().addNewItem(item);
               response.status(201);
+              return "OK";
+            } else {
+              return makeError(response, 409, "Item already exists.");
             }
-            return "OK";
           });
 
           //--- GET /model/items/:identifier/state ---
@@ -169,7 +166,7 @@ public class Application {
 
   private Object safeItemRoute(Request request, Response response, Function<Item, String> action) {
     return JavaUtils.ifPresentOrElseReturn(root.getOpenHAB2Model().resolveItem(request.params("identifier")), action,
-        () -> makeError(response, 404, "Item '" + request.body() + "' not found"));
+        () -> makeError(response, 404, "Item '" + request.params("identifier") + "' not found"));
   }
 
   private String makeHistory(Item item, Response response) {
diff --git a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/DummyDataCreator.java b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/DummyDataCreator.java
index e548a6bc95012ba72675131395b9956f4a84466f..65885823f7960465adadf30bbda4f82744c54903 100644
--- a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/DummyDataCreator.java
+++ b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/DummyDataCreator.java
@@ -3,6 +3,9 @@ package de.tudresden.inf.st.eraser.spark;
 import de.tudresden.inf.st.eraser.jastadd.model.*;
 import de.tudresden.inf.st.eraser.util.JavaUtils;
 
+import java.time.Duration;
+import java.time.Instant;
+
 /**
  * Creates some activities and change events.
  *
@@ -28,12 +31,13 @@ class DummyDataCreator {
     Item iris1 = getOrCreateColorItem("iris1", "Hue Iris 1");
     Item go1 = getOrCreateColorItem("go1", "Hue Go 1");
     Item go2 = getOrCreateColorItem("go2", "Hue Go 2");
-    mlRoot.addChangeEvent(newRecognitionEvent(1, 1547637740, 1,
+    Instant now = Instant.now();
+    mlRoot.addChangeEvent(newRecognitionEvent(1, now, 1,
         new ChangedItem("green", iris1), new ChangedItem("green", go1)));
-    mlRoot.addChangeEvent(newRecognitionEvent(2, 1547637750, 1));
-    mlRoot.addChangeEvent(newRecognitionEvent(4, 1547623460, 2,
+    mlRoot.addChangeEvent(newRecognitionEvent(2, now.plusSeconds(1), 1));
+    mlRoot.addChangeEvent(newRecognitionEvent(3, now.plusSeconds(3), 2,
         new ChangedItem("off", go2)));
-    mlRoot.addChangeEvent(newManualChangeEvent(1501146256, 5,
+    mlRoot.addChangeEvent(newManualChangeEvent(4, now.plusSeconds(17),
         new ChangedItem("green", iris1),
         new ChangedItem("red", go1),
         new ChangedItem("#EE7F00", go2)));
@@ -51,23 +55,23 @@ class DummyDataCreator {
     });
   }
 
-  private RecognitionEvent newRecognitionEvent(int identifier, long timestamp, int activityIdentifier, ChangedItem... changedItems) {
+  private RecognitionEvent newRecognitionEvent(int identifier, Instant when, int activityIdentifier, ChangedItem... changedItems) {
     RecognitionEvent result = new RecognitionEvent();
     JavaUtils.ifPresentOrElse(root.resolveActivity(activityIdentifier), result::setActivity, () -> { throw new RuntimeException("No activity found for identifier " + activityIdentifier); });
-    initChangeEvent(result, identifier, timestamp, changedItems);
+    initChangeEvent(result, identifier, when, changedItems);
     return result;
   }
 
   @SuppressWarnings("SameParameterValue")
-  private ManualChangeEvent newManualChangeEvent(int identifier, long timestamp, ChangedItem... changedItems) {
+  private ManualChangeEvent newManualChangeEvent(int identifier, Instant when, ChangedItem... changedItems) {
     ManualChangeEvent result = new ManualChangeEvent();
-    initChangeEvent(result, identifier, timestamp, changedItems);
+    initChangeEvent(result, identifier, when, changedItems);
     return result;
   }
 
-  private void initChangeEvent(ChangeEvent result, int identifier, long timestamp, ChangedItem... changedItems) {
+  private void initChangeEvent(ChangeEvent result, int identifier, Instant when, ChangedItem... changedItems) {
     result.setIdentifier(identifier);
-    result.setTimestamp(timestamp);
+    result.setCreated(when);
     for (ChangedItem changedItem : changedItems) {
       result.addChangedItem(changedItem);
     }
diff --git a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleChangeEvent.java b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleChangeEvent.java
index 07894ede8b266b46bf4aa364bb4495d07abc8740..6a1c1a91bc3d8cdc28d44b07b766168e645786bf 100644
--- a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleChangeEvent.java
+++ b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleChangeEvent.java
@@ -3,6 +3,7 @@ package de.tudresden.inf.st.eraser.spark;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 
+import java.time.Instant;
 import java.util.List;
 
 /**
@@ -13,7 +14,7 @@ import java.util.List;
 @Data
 @AllArgsConstructor
 public abstract class SimpleChangeEvent {
-  public final long timestamp;
+  public final Instant created;
   public final int identifier;
   public final List<SimpleChangedItem> changed_items;
 }
diff --git a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleManualChangeEvent.java b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleManualChangeEvent.java
index 71e43cdbbcce6eb65704d280540220db880ed3b6..685436cd376b993403db98d4a6192b4de94975d5 100644
--- a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleManualChangeEvent.java
+++ b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleManualChangeEvent.java
@@ -5,6 +5,7 @@ import de.tudresden.inf.st.eraser.util.JavaUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.time.Instant;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -18,12 +19,12 @@ import java.util.stream.Collectors;
 public class SimpleManualChangeEvent extends SimpleChangeEvent {
   public final String type = "manual";
 
-  public SimpleManualChangeEvent(long timestamp, int identifier, List<SimpleChangedItem> changedItems) {
-    super(timestamp, identifier, changedItems);
+  public SimpleManualChangeEvent(Instant created, int identifier, List<SimpleChangedItem> changedItems) {
+    super(created, identifier, changedItems);
   }
 
   static SimpleManualChangeEvent createFrom(ManualChangeEvent event) {
-    return new SimpleManualChangeEvent(event.getTimestamp(), event.getIdentifier(),
+    return new SimpleManualChangeEvent(event.getCreated(), event.getIdentifier(),
         JavaUtils.toStream(event.getChangedItems()).map(SimpleChangedItem::createFrom).collect(Collectors.toList()));
   }
 }
diff --git a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleRecognitionEvent.java b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleRecognitionEvent.java
index 587c3ae127da7cf3be1064a4351e36f6bbf81e7d..0a3821e4fc49d9fa2b2d0e75717da5477c0a3fa7 100644
--- a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleRecognitionEvent.java
+++ b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleRecognitionEvent.java
@@ -5,6 +5,7 @@ import de.tudresden.inf.st.eraser.util.JavaUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.time.Instant;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -20,14 +21,14 @@ public class SimpleRecognitionEvent extends SimpleChangeEvent {
   public final String description;
   public final String type = "recognition";
 
-  public SimpleRecognitionEvent(long timestamp, int identifier, List<SimpleChangedItem> changedItems, int activity, String description) {
-    super(timestamp, identifier, changedItems);
+  public SimpleRecognitionEvent(Instant created, int identifier, List<SimpleChangedItem> changedItems, int activity, String description) {
+    super(created, identifier, changedItems);
     this.activity = activity;
     this.description = description;
   }
 
   static SimpleRecognitionEvent createFrom(RecognitionEvent event) {
-    return new SimpleRecognitionEvent(event.getTimestamp(), event.getIdentifier(),
+    return new SimpleRecognitionEvent(event.getCreated(), event.getIdentifier(),
         JavaUtils.toStream(event.getChangedItems()).map(SimpleChangedItem::createFrom).collect(Collectors.toList()),
         event.getActivity().getIdentifier(), event.getActivity().getLabel());
   }
diff --git a/eraser.starter/build.gradle b/eraser.starter/build.gradle
index ddb56ddf0b9a90f815f09b20d117485c48300c70..186e75a1e448ab9f0e61c5f8df2d3ac94da2f1f9 100644
--- a/eraser.starter/build.gradle
+++ b/eraser.starter/build.gradle
@@ -18,10 +18,13 @@ dependencies {
     compile project(':feedbackloop.analyze')
     compile project(':feedbackloop.plan')
     compile project(':feedbackloop.execute')
-    compile project(':feedbackloop.learner')
+    compile project(':feedbackloop.learner_backup')
+    compile project(':datasets')
     compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.9.8'
     compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.8'
     compile group: 'net.sourceforge.argparse4j', name: 'argparse4j', version: '0.8.1'
+    //    compile project(':feedbackloop.learner')
+
 }
 
 run {
diff --git a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java
index b263fd586f95781c26345076e7a3132472f20eab..acc4b93a471d0b3a02676d37cb0314c85756ed1c 100644
--- a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java
+++ b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java
@@ -6,18 +6,15 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import de.tudresden.inf.st.eraser.feedbackloop.analyze.AnalyzeImpl;
 import de.tudresden.inf.st.eraser.feedbackloop.api.Analyze;
 import de.tudresden.inf.st.eraser.feedbackloop.api.Execute;
-import de.tudresden.inf.st.eraser.feedbackloop.api.Learner;
 import de.tudresden.inf.st.eraser.feedbackloop.api.Plan;
-import de.tudresden.inf.st.eraser.feedbackloop.api.EncogModel;
 import de.tudresden.inf.st.eraser.feedbackloop.execute.ExecuteImpl;
-import de.tudresden.inf.st.eraser.feedbackloop.learner.LearnerHelper;
-import de.tudresden.inf.st.eraser.feedbackloop.learner.LearnerImpl;
+import de.tudresden.inf.st.eraser.feedbackloop.learner_backup.Learner;
+import de.tudresden.inf.st.eraser.feedbackloop.learner_backup.MachineLearningImpl;
 import de.tudresden.inf.st.eraser.feedbackloop.plan.PlanImpl;
 import de.tudresden.inf.st.eraser.jastadd.model.*;
 import de.tudresden.inf.st.eraser.openhab2.OpenHab2Importer;
 import de.tudresden.inf.st.eraser.openhab2.mqtt.MQTTUpdater;
 import de.tudresden.inf.st.eraser.spark.Application;
-import de.tudresden.inf.st.eraser.util.JavaUtils;
 import de.tudresden.inf.st.eraser.util.ParserUtils;
 import net.sourceforge.argparse4j.ArgumentParsers;
 import net.sourceforge.argparse4j.annotation.Arg;
@@ -28,10 +25,10 @@ import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.Collections;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
@@ -113,53 +110,100 @@ public class EraserStarter {
         }
     }
 
+    // initialize backup learner
+    Learner learner = new Learner();
+
     // initialize activity recognition
     MachineLearningRoot machineLearningRoot = root.getMachineLearningRoot();
     if (settings.activity.dummy) {
-      logger.info("Using dummy activity recognition");
+      logger.info("Using dummy activity recognition, ignoring other settings for this");
       machineLearningRoot.setActivityRecognition(DummyMachineLearningModel.createDefault());
     } else {
-      logger.error("Reading activity recognition from file is not supported yet!");
-      // TODO
+      MachineLearningImpl handler = new MachineLearningImpl(learner, MachineLearningImpl.GOAL_ACTIVITY_PHONE_AND_WATCH);
+      handler.setKnowledgeBaseRoot(root);
+      logger.info("Reading activity recognition from csv file {}", settings.activity.file);
+      handler.initActivities(settings.activity.realURL().getFile());
+      ExternalMachineLearningModel machineLearningModel = new ExternalMachineLearningModel();
+      machineLearningModel.setEncoder(handler);
+      machineLearningModel.setDecoder(handler);
+      root.getMachineLearningRoot().setActivityRecognition(machineLearningModel);
+
+      //Begin the Integration
+      Item item1=model.resolveItem("m_accel_x").get();
+      Item item2=model.resolveItem("m_accel_y").get();
+      Item item3=model.resolveItem("m_accel_z").get();
+      Item item4=model.resolveItem("m_rotation_x").get();
+      Item item5=model.resolveItem("m_rotation_y").get();
+      Item item6=model.resolveItem("m_rotation_z").get();
+      Item item7=model.resolveItem("w_accel_x").get();
+      Item item8=model.resolveItem("w_accel_y").get();
+      Item item9=model.resolveItem("w_accel_z").get();
+      Item item10=model.resolveItem("w_rotation_x").get();
+      Item item11=model.resolveItem("w_rotation_y").get();
+      Item item12=model.resolveItem("w_rotation_z").get();
+      //0.2717419,8.698134,4.471172,0.043741,0.515962,0.854318,1.8818425,4.9320555,8.145074,0.2374878,-0.032836914,0.3381958,working
+      item1.setStateFromString("0.2717419");
+      item2.setStateFromString("8.698134");
+      item3.setStateFromString("4.471172");
+      item4.setStateFromString("0.043741");
+      item5.setStateFromString("0.515962");
+      item6.setStateFromString("0.854318");
+      item7.setStateFromString("1.8818425");
+      item8.setStateFromString("4.9320555");
+      item9.setStateFromString("8.145074");
+      item10.setStateFromString("0.2374878");
+      item11.setStateFromString("-0.032836914");
+      item12.setStateFromString("0.3381958");
+
+      ArrayList<Item> newData=new ArrayList<>();
+      newData.add(item1);
+      newData.add(item2);
+      newData.add(item3);
+      newData.add(item4);
+      newData.add(item5);
+      newData.add(item6);
+      newData.add(item7);
+      newData.add(item8);
+      newData.add(item9);
+      newData.add(item10);
+      newData.add(item11);
+      newData.add(item12);
+      handler.newData(newData);
+      List<ItemPreference> preference=handler.classify().getPreferences();
+      for(ItemPreference preference1 : preference){
+        preference1.apply();
+      }
     }
 
     // initialize preference learning
     if (settings.preference.dummy) {
-      logger.info("Using dummy preference learning");
+      logger.info("Using dummy preference learning, ignoring other settings for this");
       machineLearningRoot.setPreferenceLearning(DummyMachineLearningModel.createDefault());
     } else {
-      logger.info("Reading preference learning from file {}", settings.preference.file);
-      Learner learner = new LearnerImpl();
-      // there should be a method to load a model using an URL
-      boolean loadingSuccessful = false;
-      try (InputStream input = settings.preference.realURL().openStream()) {
-        loadingSuccessful = learner.loadModelFromFile(input, settings.preference.id,
-            Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
-      } catch (IOException e) {
-        logger.catching(e);
-        loadingSuccessful = false;
-      }
-//      Model preference = learner.getTrainedModel(settings.preference.realURL(), settings.preference.id);
-      logger.debug("Loading of {} was {}", settings.preference.realURL(), loadingSuccessful ? "successful" : "failed");
-      if (loadingSuccessful) {
-        EncogModel preference = learner.getTrainedModel(settings.preference.id);
-        NeuralNetworkRoot neuralNetwork = LearnerHelper.transform(preference);
-        if (neuralNetwork == null) {
-          logger.error("Could not create preference model, see possible previous errors.");
-        } else {
-          machineLearningRoot.setPreferenceLearning(neuralNetwork);
-          neuralNetwork.setOutputApplication(zeroToThree -> 33 * zeroToThree);
-          JavaUtils.ifPresentOrElse(
-              model.resolveItem(settings.preference.affectedItem),
-              item -> neuralNetwork.getOutputLayer().setAffectedItem(item),
-              () -> logger.error("Output item not set from value '{}'", settings.preference.affectedItem));
-        }
-      } else {
-        // loading was not successful
-        logger.warn("Falling back to dummy preference learning");
-        machineLearningRoot.setPreferenceLearning(DummyMachineLearningModel.createDefault());
+      logger.info("Reading preference learning from csv file {}", settings.preference.file);
+      MachineLearningImpl handler = new MachineLearningImpl(learner, MachineLearningImpl.GOAL_PREFERENCE_BRIGHTNESS_IRIS);
+      handler.setKnowledgeBaseRoot(root);
+      handler.initPreferences(settings.preference.realURL().getFile());
+      ExternalMachineLearningModel machineLearningModel = new ExternalMachineLearningModel();
+      machineLearningModel.setEncoder(handler);
+      machineLearningModel.setDecoder(handler);
+      root.getMachineLearningRoot().setPreferenceLearning(machineLearningModel);
+      //working,medium,240,70
+      Item activity_item = model.resolveItem("activity").get();
+      String activity=activity_item.getStateAsString();
+      activity_item.setStateFromString(activity);
+      Item brightness_item = model.resolveItem("w_brightness").get();
+      brightness_item.setStateFromString("medium");
+      ArrayList<Item> newData1 = new ArrayList<>();
+      newData1.add(activity_item);
+      newData1.add(brightness_item);
+      handler.newData(newData1);
+      List<ItemPreference> preference=handler.classify().getPreferences();
+      for(ItemPreference preference1 : preference){
+        preference1.apply();
       }
     }
+
     machineLearningRoot.getPreferenceLearning().connectItems(settings.preference.items);
     if (!machineLearningRoot.getActivityRecognition().check()) {
       logger.fatal("Invalid activity recognition!");
diff --git a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/Setting.java b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/Setting.java
index dacbb4287bb16d2f4fcdb5ba2e2cb4b67cf6406e..09af126b0a66f54aa2b6c88fb04bda9cb7218cb3 100644
--- a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/Setting.java
+++ b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/Setting.java
@@ -32,7 +32,7 @@ class Setting {
     URL realURL() {
       if (external) {
         try {
-          return Paths.get(file).toUri().toURL();
+          return Paths.get(file).toUri().normalize().toURL();
         } catch (MalformedURLException e) {
           logger.catching(e);
           return null;
diff --git a/eraser.starter/src/main/resources/starter.eraser b/eraser.starter/src/main/resources/starter.eraser
index 25505fe24d64d3ed08ecdc0a3d741625b25e46ad..a8dc0c5731c9f5ce106c55aa4d2a87fc8f85df4f 100644
--- a/eraser.starter/src/main/resources/starter.eraser
+++ b/eraser.starter/src/main/resources/starter.eraser
@@ -3,26 +3,38 @@ Number Item: id="datetime_month" label="Month" state="1" topic="datetime_month";
 Number Item: id="datetime_day" label="Day" state="31" topic="datetime_day";
 Number Item: id="datetime_hour" label="Hour" state="13" topic="datetime_hour";
 Number Item: id="datetime_minute" label="Minute" state="37" topic="datetime_minute";
-Number Item: id="bias" label="bias item" state="1" ;
-Activity Item: id="activity" ;
+Number Item: id="bias" label="bias item" state="1";
+
+
+String Item: id="m_accel_x" label="" state="0.2717419" topic="m_accel_x";
+String Item: id="m_accel_y" label="" state="8.698134" topic="m_accel_y";
+String Item: id="m_accel_z" label="" state="4.471172" topic="m_accel_z";
+String Item: id="m_rotation_x" label="" state="0.043741" topic="m_rotation_x";
+String Item: id="m_rotation_y" label="" state="0.515962" topic="m_rotation_y";
+String Item: id="m_rotation_z" label="" state="0.854318" topic="m_rotation_z";
+String Item: id="w_accel_x" label="" state="1.8818425" topic="w_accel_x";
+String Item: id="w_accel_y" label="" state="4.9320555" topic="w_accel_y";
+String Item: id="w_accel_z" label="" state="8.145074" topic="w_accel_z";
+String Item: id="w_rotation_x" label="" state="0.2374878" topic="w_rotation_x";
+String Item: id="w_rotation_y" label="" state="-0.032836914" topic="w_rotation_y";
+String Item: id="w_rotation_z" label="" state="0.3381958" topic="w_rotation_y";
+String Item: id="w_brightness" label="" state="bright" topic="w_brightness";
+//String Item: id="activity" label="" state="lying" topic="activity";
+Activity Item: id="activity" topic="activity";
 
 Group: id="Lights" items=["iris1_item"];
 Group: id="Datetime" items=["datetime_month", "datetime_day", "datetime_hour", "datetime_minute"];
 
-Mqtt: incoming="oh2/out/" outgoing="oh2/in/" host="localhost:2883" ;
+Mqtt: incoming="oh2/out/" outgoing="oh2/in/" host="localhost:1883" ;
 //Mqtt: incoming="oh2/out/" outgoing="oh2/in/" host="192.168.1.250" ;
 
 Influx: host="172.22.1.152" ;
-
+//"working", "walking", "dancing", "lying", "getting up", "reading"
 ML: activities={
-  0: "Open door in empty room",
-  1: "Door closed in empty room",
-  2: "Open door with person in room",
-  3: "Door closed with person in room",
-  4: "Working",
-  5: "Watch TV",
-  6: "Reading",
-  7: "Listening to music",
-  8: "Going to sleep",
-  9: "Wake up"
+  0: "working",
+  1: "walking",
+  2: "dancing",
+  3: "lying",
+  4: "getting up",
+  5: "reading"
 } ;
diff --git a/eraser.starter/starter-setting.yaml b/eraser.starter/starter-setting.yaml
index f29763c43dfa4b789f872efc9eec88439930eff9..e8f438cf3eeb22d71d44c675e7328e61ba612562 100644
--- a/eraser.starter/starter-setting.yaml
+++ b/eraser.starter/starter-setting.yaml
@@ -24,28 +24,29 @@ load:
 
 # Model for activity recognition. If dummy is true, then the file parameter is ignored.
 activity:
-  # File to read in. Expected format = eg
-  file: activity.eg
+  # File to read in. Expected format = csv   /Users/boqi/eraser/datasets
+  file: ../datasets/backup/activity_data.csv
+  external: true
   # Use dummy model in which the current activity is directly editable. Default: false.
-  dummy: true
+  dummy: false
   # Model id. Default: 1.
   id: 1
+  # Item to change with classification result
+  affectedItem: activity
 
 # Model for preference learning. If dummy is true, then the file parameter is ignored.
 preference:
-  # File to read in. Expected format = eg
-  file: preference.eg
+  # File to read in. Expected format = csv
+  file: ../datasets/backup/preference_data.csv
+  external: true
   # Use dummy model in which the current activity is directly editable. Default: false.
   dummy: false
   # Model id. Default: 1.
   id: 1
   # Items to connect to inputs
   items:
-    - datetime_month
-    - datetime_day
-    - datetime_hour
-    - datetime_minute
-#    - activity
+    - activity
+    - w_brightness
   # Item to change with classification result
   affectedItem: iris1_item
 
diff --git a/feedbackloop.learner/.settings/org.eclipse.buildship.core.prefs b/feedbackloop.learner/.settings/org.eclipse.buildship.core.prefs
deleted file mode 100644
index b1886adb46c085de842f1283c1a3c25151bfc988..0000000000000000000000000000000000000000
--- a/feedbackloop.learner/.settings/org.eclipse.buildship.core.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-connection.project.dir=..
-eclipse.preferences.version=1
diff --git a/feedbackloop.learner_backup/build.gradle b/feedbackloop.learner_backup/build.gradle
index d0cf7913f010772f11df428d587fc351d8df634a..6199fa8da5b905d3d5d4cb02d6c6858218f3ffdd 100644
--- a/feedbackloop.learner_backup/build.gradle
+++ b/feedbackloop.learner_backup/build.gradle
@@ -8,6 +8,13 @@ dependencies {
     testCompile group: 'junit', name: 'junit', version: '4.12'
     testCompile group: 'org.hamcrest', name: 'hamcrest-junit', version: '2.0.0.0'
     compile group: 'org.encog', name: 'encog-core', version: '3.4'
+    implementation group: 'com.opencsv', name: 'opencsv', version: '4.1'
+    implementation group: 'commons-io', name: 'commons-io', version: '2.5'
+    implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.8'
+    implementation group: 'org.apache.httpcomponents', name: 'fluent-hc', version: '4.5.8'
+    // https://mvnrepository.com/artifact/org.apache.spark/spark-mllib
+    //runtime group: 'org.apache.spark', name: 'spark-mllib_2.10', version: '1.3.0'
+    compile group: 'com.sparkjava', name: 'spark-core', version: '2.9.0'
 }
 
 run {
diff --git a/feedbackloop.learner_backup/out/production/classes/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/Learner.class b/feedbackloop.learner_backup/out/production/classes/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/Learner.class
deleted file mode 100644
index b5c7ac883ec06fd2a4a8edc9f6dec90d4ef8408a..0000000000000000000000000000000000000000
Binary files a/feedbackloop.learner_backup/out/production/classes/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/Learner.class and /dev/null differ
diff --git a/feedbackloop.learner_backup/out/production/classes/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/Main.class b/feedbackloop.learner_backup/out/production/classes/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/Main.class
deleted file mode 100644
index dade9fc50c465dd099158b290d8ea2e2a0b7b776..0000000000000000000000000000000000000000
Binary files a/feedbackloop.learner_backup/out/production/classes/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/Main.class and /dev/null differ
diff --git a/feedbackloop.learner_backup/out/test/classes/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/ATest.class b/feedbackloop.learner_backup/out/test/classes/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/ATest.class
deleted file mode 100644
index 680ab03419aa1af885787e2374c71cf5ff4437df..0000000000000000000000000000000000000000
Binary files a/feedbackloop.learner_backup/out/test/classes/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/ATest.class and /dev/null differ
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/CsvTransfer.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/CsvTransfer.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c08268d59dd4003149e551d2e3e60895d30e3f6
--- /dev/null
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/CsvTransfer.java
@@ -0,0 +1,60 @@
+package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
+
+import java.io.*;
+import java.util.*;
+
+import com.opencsv.CSVReader;
+import com.opencsv.CSVWriter;
+
+
+public class CsvTransfer {
+    public static void main(String[] args){
+        Learner learner=new Learner();
+        learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv");
+    }
+
+    //learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv");
+    /**private static final String CSV_FILE_PATH
+            = "datasets/backup/activity_data_example.csv";
+    private static final String OUTPUT_FILE_PATH
+            = "datasets/backup/activity_data.csv";
+    public static void main(String[] args)
+    {
+        addDataToCSV(CSV_FILE_PATH, OUTPUT_FILE_PATH);
+    }
+    public static void addDataToCSV(String input, String output)
+    {
+        File input_file = new File(input);
+        File output_file = new File(output);
+        try {
+            // create FileWriter object with file as parameter
+            FileReader reader = new FileReader(input_file);
+            CSVReader csv_reader = new CSVReader(reader);
+            String[] nextRecord;
+            FileWriter writer = new FileWriter(output_file);
+            CSVWriter csv_writer = new CSVWriter(writer, ',',
+                    CSVWriter.NO_QUOTE_CHARACTER,
+                    CSVWriter.DEFAULT_ESCAPE_CHARACTER,
+                    CSVWriter.DEFAULT_LINE_END);
+            List<String[]> data = new ArrayList<String[]>();
+
+            while ((nextRecord = csv_reader.readNext()) != null) {
+                data.add(nextRecord);
+
+                for (String cell : nextRecord) {
+                    System.out.print(cell + "\t");
+                }
+                System.out.println();
+            }
+            csv_writer.writeAll(data);
+            writer.close();
+            csv_reader.close();
+        }
+        catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }*/
+}
+
+
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/DummyPreference.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/DummyPreference.java
new file mode 100644
index 0000000000000000000000000000000000000000..59f3ad9f43fd11eab315e145b1780d4152b82181
--- /dev/null
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/DummyPreference.java
@@ -0,0 +1,75 @@
+package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
+import com.opencsv.CSVWriter;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+public class DummyPreference {
+    private static String activity;  //Activity: walking, reading, working, dancing, lying, getting up
+    private static String watch_brightness; //dark: <45; dimmer 45-70; bright >70;
+    private static String light_color_openhab_H; //red 7; green 120; blue 240; yellow 60; sky blue 180; purple 300;
+    private static String brightness_output; //1-100**/
+    private static Random random = new Random();
+
+    public static void main(String[] args) {
+        creator();
+    }
+    static void creator(){
+
+
+        try{
+            FileWriter writer = new FileWriter("datasets/backup/preference_data.csv",true);
+            CSVWriter csv_writer = new CSVWriter(writer, ',',
+                    CSVWriter.NO_QUOTE_CHARACTER,
+                    CSVWriter.DEFAULT_ESCAPE_CHARACTER,
+                    CSVWriter.DEFAULT_LINE_END);
+
+
+            //activity="walking" green
+            activity ="walking";
+
+           // activity ="reading";
+            csv_writer.writeAll(generator("walking","green"));
+            csv_writer.writeAll(generator("reading","sky blue"));
+            csv_writer.writeAll(generator("working","blue"));
+            csv_writer.writeAll(generator("dancing","purple"));
+            csv_writer.writeAll(generator("lying","red"));
+            csv_writer.writeAll(generator("getting up","yellow"));
+            csv_writer.close();
+            writer.close();
+        }catch (IOException e){e.printStackTrace();}
+    }
+    static List<String[]> generator(String activity_input, String color){
+        List<String[]> data = new ArrayList<String[]>();
+        activity = activity_input;
+        light_color_openhab_H =color;
+        //100 walking with different lighting intensity
+        for (int i=0; i<100; i++){
+            String[] add_data = new String[4];
+            int brightness = random.nextInt(3000);
+            System.out.println(brightness);
+            if (brightness<45){
+                watch_brightness = "dark";
+                brightness_output ="100";
+            }else if(45<=brightness && brightness<200){
+                watch_brightness = "dimmer";
+                brightness_output ="40";
+            }else if( 200<=brightness && brightness<1000){
+                watch_brightness = "medium";
+                brightness_output ="70";
+            }else{
+                watch_brightness = "bright";
+                brightness_output ="0";
+            }
+            add_data[0] = activity;
+            add_data[1] = watch_brightness;
+            add_data[2] = light_color_openhab_H;
+            add_data[3] = brightness_output;
+            data.add(add_data);
+        }
+        return data;
+    }
+}
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java
index c728eed8e76b70b64c74455633edec388e16ce3e..5d8021d8faf7519d9ec15305f0752cfbcd742a0c 100644
--- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java
@@ -1,16 +1,15 @@
 package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
 
 import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Arrays;
-
-import com.sun.javafx.tools.packager.Log;
-import org.encog.ConsoleStatusReportable;
+import java.io.IOException;
+//import java.util.ArrayList;
+//import com.sun.javafx.tools.packager.Log;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+//import org.encog.ConsoleStatusReportable;
 import org.encog.Encog;
-import org.encog.bot.BotUtil;
-import org.encog.ml.MLInput;
-import org.encog.ml.MLRegression;
+import org.encog.ml.MLClassification;
+//import org.encog.ml.MLRegression;
 import org.encog.ml.data.MLData;
 import org.encog.ml.data.versatile.NormalizationHelper;
 import org.encog.ml.data.versatile.VersatileMLDataSet;
@@ -22,8 +21,6 @@ import org.encog.ml.factory.MLMethodFactory;
 import org.encog.ml.model.EncogModel;
 import org.encog.neural.networks.BasicNetwork;
 import org.encog.util.csv.CSVFormat;
-import org.encog.util.csv.ReadCSV;
-import org.encog.util.simple.EncogUtility;
 import static org.encog.persist.EncogDirectoryPersistence.*;
 
 public class Learner {
@@ -31,129 +28,163 @@ public class Learner {
     /**
      * intial train
      * */
-    private String csv_url_activity;
-    private String csv_url_perference;
-    private String save_activity_model_file = "datasets/backup/activity_model.eg";
-    private String save_perference_model_file = "datasets/backup/preference_model.eg";
+    private File save_activity_model_file;
+    private File save_preference_model_file;
     private File csv_file;
-    private VersatileDataSource souce;
-    private VersatileMLDataSet data;
-    private EncogModel model;
+    private VersatileMLDataSet a_data;
+    private VersatileMLDataSet p_data;
+    private EncogModel a_model;
+    private EncogModel p_model;
     private NormalizationHelper activity_helper;
     private NormalizationHelper preference_helper;
-    private MLRegression best_method;
-    private String[] new_data;
-    private String activity_result;
-    private String preference_result;
+    private MLClassification a_best_method;
+    private MLClassification p_best_method;
+    private final Logger logger = LogManager.getLogger(Learner.class);
+
+    public Learner() {
+        try {
+            save_activity_model_file = File.createTempFile("activity_model", "eg");
+        } catch (IOException e) {
+            // use local alternative
+            save_activity_model_file = new File("activity_model.eq");
+        }
+        try {
+            save_preference_model_file = File.createTempFile("preference_model", "eg");
+        } catch (IOException e) {
+            // use local alternative
+            save_preference_model_file = new File("preference_model.eg");
+        }
+        save_activity_model_file.deleteOnExit();
+        save_preference_model_file.deleteOnExit();
+    }
 
     private void activityDataAnalyser(String activity_csv_url){
-        this.csv_url_activity = activity_csv_url;
+        VersatileDataSource a_souce;
+        String csv_url_activity;
+        csv_url_activity = activity_csv_url;
         this.csv_file = new File(csv_url_activity);
-        souce = new CSVDataSource(csv_file,false,CSVFormat.DECIMAL_POINT);
-        data = new VersatileMLDataSet(souce);
-        data.defineSourceColumn("monat", 0, ColumnType.continuous);
-        data.defineSourceColumn("day", 1, ColumnType.continuous);
-        data.defineSourceColumn("hour", 2, ColumnType.continuous);
-        data.defineSourceColumn("minute", 3, ColumnType.continuous);
-        ColumnDefinition outputColumn = data.defineSourceColumn("labels", 4, ColumnType.continuous);
-        data.defineSingleOutputOthersInput(outputColumn);
-        data.analyze();
-        System.out.println("get data ");
-        model = new EncogModel(data);
-        model.selectMethod(data, MLMethodFactory.TYPE_FEEDFORWARD);
-        data.normalize();
-        activity_helper = data.getNormHelper();
-        System.out.println(activity_helper.toString());
+        a_souce = new CSVDataSource(csv_file,false,CSVFormat.DECIMAL_POINT);
+        a_data = new VersatileMLDataSet(a_souce);
+        String[] activity_inputs={"m_accel_x","m_accel_y", "m_accel_z",
+                "m_rotation_x","m_rotation_y", "m_rotation_z",
+                "w_accel_x","w_accel_y", "w_accel_z",
+                "w_rotation_x","w_rotation_y","w_rotation_z"
+        };
+        for(int i=0; i < activity_inputs.length; i++){
+            a_data.defineSourceColumn(activity_inputs[i], i, ColumnType.continuous);
+        }
+        ColumnDefinition outputColumn = a_data.defineSourceColumn("labels", 12, ColumnType.nominal);
+        a_data.defineSingleOutputOthersInput(outputColumn);
+        a_data.analyze();
+        a_model = new EncogModel(a_data);
+        a_model.selectMethod(a_data, MLMethodFactory.TYPE_FEEDFORWARD);
+        a_data.normalize();
+        activity_helper = a_data.getNormHelper();
     }
 
-    private void perferenceDataAnalyser(String perference_csv_url){
-        this.csv_url_perference = perference_csv_url;
-        this.csv_file = new File(this.csv_url_perference);
-        souce = new CSVDataSource(csv_file,false,CSVFormat.DECIMAL_POINT);
-        data = new VersatileMLDataSet(souce);
-        data.defineSourceColumn("activity", 0, ColumnType.continuous);
-        data.defineSourceColumn("brightness", 1, ColumnType.continuous);
-        data.defineSourceColumn("time", 2, ColumnType.continuous);
-        data.defineSourceColumn("minute", 3, ColumnType.continuous);
-        ColumnDefinition outputColumn = data.defineSourceColumn("labels", 4, ColumnType.continuous);
-        data.defineSingleOutputOthersInput(outputColumn);
-        data.analyze();
-        model = new EncogModel(data);
-        model.selectMethod(data, MLMethodFactory.TYPE_FEEDFORWARD);
-        //model.setReport(new ConsoleStatusReportable());
-        data.normalize();
-        preference_helper = data.getNormHelper();
-        System.out.println(activity_helper.toString());
+    private void preferenceDataAnalyser(String preference_csv_url){
+        VersatileDataSource p_source;
+        String csv_url_preference;
+        csv_url_preference = preference_csv_url;
+        this.csv_file = new File(csv_url_preference);
+        p_source = new CSVDataSource(csv_file,false,CSVFormat.DECIMAL_POINT);
+        p_data = new VersatileMLDataSet(p_source);
+        p_data.defineSourceColumn("activity", 0, ColumnType.nominal);
+        p_data.defineSourceColumn("w_brightness", 1, ColumnType.nominal);
+        ColumnDefinition outputColumn1 = p_data.defineSourceColumn("label1", 2, ColumnType.continuous);
+        ColumnDefinition outputColumn2 = p_data.defineSourceColumn("label2", 3, ColumnType.continuous);
+        ColumnDefinition[] outputs = new ColumnDefinition[2];
+        outputs[0] = outputColumn1;
+        outputs[1] = outputColumn2;
+        p_data.defineMultipleOutputsOthersInput(outputs);
+        p_data.analyze();
+        p_model = new EncogModel(p_data);
+        p_model.selectMethod(p_data, MLMethodFactory.TYPE_FEEDFORWARD);
+        p_data.normalize();
+        preference_helper = p_data.getNormHelper();
     }
 
-    void train(String activity_url,String perference_url){
+    void train(String activity_url,String preference_url){
         activity_train(activity_url);
-        Log.info("activity training finished");
-        preference_train(perference_url);
-        Log.info("preference training finished");
+        preference_train(preference_url);
+        Encog.getInstance().shutdown();
 
     }
-    private void activity_train(String activity_csv_url){
+
+    void activity_train(String activity_csv_url){
+        logger.info("Activity training is beginning ... ...");
         activityDataAnalyser(activity_csv_url);
-        model.holdBackValidation(0.3, true, 1001);
-        model.selectTrainingType(data);
-        best_method = (MLRegression)model.crossvalidate(5, true);
-        System.out.println(best_method);
+        a_model.holdBackValidation(0.3, true, 1001);
+        a_model.selectTrainingType(a_data);
+        a_best_method = (MLClassification)a_model.crossvalidate(5, true);
         saveEncogModel(save_activity_model_file);
+        logger.info("Activity training is finished ... ...");
+        Encog.getInstance().shutdown();
     }
-    private void preference_train(String perfence_csv_url){
-        perferenceDataAnalyser(perfence_csv_url);
-        model.holdBackValidation(0.3, true, 1001);
-        model.selectTrainingType(data);
-        best_method = (MLRegression)model.crossvalidate(5, true);
-        System.out.println(best_method);
-        saveEncogModel(save_perference_model_file);
+    void preference_train(String prefence_csv_url){
+        logger.info("Preference training is beginning ... ...");
+        preferenceDataAnalyser(prefence_csv_url);
+        p_model.holdBackValidation(0.3, true, 1001);
+        p_model.selectTrainingType(p_data);
+        p_best_method = (MLClassification)p_model.crossvalidate(5, true);
+        saveEncogModel(save_preference_model_file);
+        logger.info("Preference training is finished ... ...");
+        Encog.getInstance().shutdown();
     }
 
     String[] predictor(String[] new_data){
-        this.new_data = new_data;
-        activityDataAnalyser("datasets/backup/activity_data.csv");
-        perferenceDataAnalyser("datasets/backup/preference_data.csv");
-        String[] result = new String[2];
-        result[0] = activity_predictor();
-        result[1] = perference_predictor();
+        String[] preference_data = new String[2];
+        String[] result = new String[3];
+        String[] activity_data= new String[12];
+        for(int i=0; i<new_data.length;i++){
+            activity_data[i]=new_data[i];
+        }
+        result[0] = activity_predictor(activity_data);
+        preference_data[0]=result[0];
+        preference_data[1]=new_data[12];
+        result[1] = preference_predictor(preference_data)[0];
+        result[2] = preference_predictor(preference_data)[1];
         Encog.getInstance().shutdown();
         return result;
     }
 
-    private String activity_predictor(){
-        BasicNetwork activity_method = (BasicNetwork) loadObject(new File(save_activity_model_file));
+    String activity_predictor(String[] new_data){
+        logger.info("Activity predicting ... ...");
+        String activity_result;
+        activityDataAnalyser("../datasets/backup/activity_data.csv");
+        BasicNetwork activity_method = (BasicNetwork) loadObject(save_activity_model_file);
         MLData input = activity_helper.allocateInputVector();
-        String[] activity_new_data = new String[4];
-        activity_new_data[0] = new_data[0];
-        activity_new_data[1] = new_data[1];
-        activity_new_data[2] = new_data[2];
-        activity_new_data[3] = new_data[3];
-        activity_helper.normalizeInputVector(activity_new_data,input.getData(),false);
+        activity_helper.normalizeInputVector(new_data,input.getData(),false);
         MLData output = activity_method.compute(input);
-        System.out.println("input:"+input);
-        System.out.println("output"+output);
         activity_result = activity_helper.denormalizeOutputVectorToString(output)[0];
-        System.out.println("output activity"+ activity_result);
+        Encog.getInstance().shutdown();
+        logger.debug("Activity Predictor result is: {}",activity_result);
         return activity_result;
     }
 
-    private String perference_predictor(){
-        BasicNetwork preference_method = (BasicNetwork)loadObject(new File(save_perference_model_file));
+    String[] preference_predictor(String[] new_data){
+        logger.info("Activity predicting ... ...");
+        String[] preference_result;
+        preference_result = new String[2];
+        preferenceDataAnalyser("../datasets/backup/preference_data.csv");
+        BasicNetwork preference_method = (BasicNetwork)loadObject(save_preference_model_file);
         MLData input = preference_helper.allocateInputVector();
-        String[] perference_new_data = new String[4];
-        perference_new_data[0] = activity_result;
-        perference_new_data[1] = new_data[4];
-        perference_new_data[2] = new_data[5];
-        perference_new_data[3] = new_data[6];
-        preference_helper.normalizeInputVector(perference_new_data, input.getData(),false);
+        preference_helper.normalizeInputVector(new_data, input.getData(),false);
         MLData output = preference_method.compute(input);
-        preference_result = preference_helper.denormalizeOutputVectorToString(output)[0];
+        preference_result[0] = preference_helper.denormalizeOutputVectorToString(output)[0];
+        preference_result[1] = preference_helper.denormalizeOutputVectorToString(output)[1];
+        Encog.getInstance().shutdown();
+        logger.debug("Preference Predictor result is, Color:  {}",Math.round(Float.valueOf(preference_result[0])));
+        logger.debug("Preference Predictor result is, Brightness: {} ",Math.round(Float.valueOf(preference_result[1])));
         return preference_result;
     }
+    private void saveEncogModel(File modelFile){
+        if (modelFile.equals(save_activity_model_file)) {
+          saveObject(modelFile, this.a_best_method);
+        } else {
+            saveObject(modelFile, this.p_best_method);
+        }
 
-    private void saveEncogModel(String model_file_url){
-        saveObject(new File(model_file_url), this.best_method);
     }
 }
 
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..dc16aa2353ea216a49d2d1e75d8cfcff4d36abbc
--- /dev/null
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java
@@ -0,0 +1,211 @@
+package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
+
+
+
+//import com.sun.javafx.tools.packager.Log;
+import de.tudresden.inf.st.eraser.jastadd.model.*;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.time.Instant;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+public class MachineLearningImpl implements MachineLearningDecoder, MachineLearningEncoder {
+
+  private List<Item> target_item_list;
+  private List<Item> relevant_item_list;
+  private String[] preference_result;
+
+  private Root root;
+  private final Logger logger = LogManager.getLogger(MachineLearningImpl.class);
+  private final Learner learner;
+  private final int goal;
+
+  public static final int GOAL_ACTIVITY_PHONE_AND_WATCH = 1;
+  public static final int GOAL_PREFERENCE_BRIGHTNESS_IRIS = 2;
+  public String activity_result;
+  private String[] activites= new String[]{"working", "walking", "dancing", "lying", "getting up", "reading"};
+  public MachineLearningImpl(Learner learner, int goal) {
+    this.learner = learner;
+    this.goal = goal;
+  }
+
+  @Override
+  public void setKnowledgeBaseRoot(Root root) {
+    this.root = root;
+    updateItems();
+  }
+
+  private void updateItems() {
+    OpenHAB2Model model = root.getOpenHAB2Model();
+    List<String> targetItemNames, relevantItemNames;
+    switch (this.goal) {
+      case GOAL_ACTIVITY_PHONE_AND_WATCH:
+        targetItemNames = Collections.singletonList("activity");
+        relevantItemNames = Arrays.asList(
+            "m_accel_x",
+            "m_accel_y",
+            "m_accel_z",
+            "m_rotation_x",
+            "m_rotation_y",
+            "m_rotation_z",
+            "w_accel_x",
+            "w_accel_y",
+            "w_accel_z",
+            "w_rotation_x",
+            "w_rotation_y",
+            "w_rotation_z"
+        );
+        break;
+      case GOAL_PREFERENCE_BRIGHTNESS_IRIS:
+        targetItemNames = Collections.singletonList("iris1_item");
+        relevantItemNames = Arrays.asList(
+            "activity",
+            "w_brightness"
+        );
+        break;
+      default:
+        logger.error("Unknown goal value ({}) set", this.goal);
+        targetItemNames = Collections.emptyList();
+        relevantItemNames = Collections.emptyList();
+    }
+    target_item_list = targetItemNames.stream()
+        .map(name -> resolve(model, name))
+        .filter(Objects::nonNull)
+        .collect(Collectors.toList());
+    relevant_item_list = relevantItemNames.stream()
+        .map(name -> resolve(model, name))
+        .filter(Objects::nonNull)
+        .collect(Collectors.toList());
+  }
+
+  private Item resolve(OpenHAB2Model model, String id) {
+    Optional<Item> maybeItem = model.resolveItem(id);
+    if (maybeItem.isPresent()) {
+      return maybeItem.get();
+    } else {
+      logger.warn("Could not find item with id {}", id);
+      return null;
+    }
+  }
+
+  @Override
+  public void newData(List<Item> changedItems) {
+    /* String topic = changedItems.get(0).getTopic().toString();
+     if(topic.equals("oh2/samsung/items1")){
+     new_data[0]=changedItems.get(0).influxMeasurementName();
+     }
+     model.getOpenHAB2Model().items();
+     Item iris_item=model.getOpenHAB2Model().resolveItem("iris_item").get();
+     iris_item.getStateAsString();*/
+    /* FIXME either save state of unchanged items here (if only changed items are reported) <- pull model
+             or let knowledge base pass all relevant items <- push model
+    */
+    if(this.goal==GOAL_ACTIVITY_PHONE_AND_WATCH){
+      String[] new_data = new String[12];
+      for (int i =0; i< new_data.length; i++){
+        new_data[i] ="0";
+      }
+      for(Item item: changedItems){
+        int i = 0;
+        for(Item item1: relevant_item_list){
+          if(item.getTopic().toString().equals(item1.getTopic().toString())){
+            new_data[i]=item.getStateAsString();
+          }
+          i++;
+        }
+      }
+      this.activity_result = learner.activity_predictor(new_data);
+
+    }else if(this.goal==GOAL_PREFERENCE_BRIGHTNESS_IRIS){
+      String[] new_data = new String[2];
+      for(Item item: changedItems){
+        if(root.getOpenHAB2Model().getActivityItem().equals(item))
+        {
+          String test=item.getStateAsString();
+          int index = Math.round(Float.valueOf(test));
+          new_data[0]=activites[index];
+        }
+        if(item.getID().equals("w_brightness")){
+          new_data[1]=item.getStateAsString();
+        }
+      }
+      this.preference_result=learner.preference_predictor(new_data);
+    }
+  }
+
+  @Override
+  public List<Item> getTargets() {
+    return target_item_list;
+  }
+
+  @Override
+  public List<Item> getRelevantItems() {
+    return relevant_item_list;
+  }
+
+  @Override
+  public void triggerTraining() {
+    logger.debug("Ignore trigger training call");
+  }
+
+  @Override
+  public Instant lastModelUpdate() {
+    return null;
+  }
+
+  @Override
+  public MachineLearningResult classify() {
+    switch (this.goal) {
+      case GOAL_ACTIVITY_PHONE_AND_WATCH:
+        String activityStringValue = activity_result;
+        Item activityItem = resolve(this.root.getOpenHAB2Model(), "activity");
+        //activityItem.setStateFromString(activityStringValue);
+        // FIXME how to translate activityStringValue to a number? or should activity item state better be a String?
+        for (int i=0; i< activites.length;i++){
+          if(activites[i].equals(activityStringValue)){
+            activityItem.setStateFromString(String.valueOf(i));
+          }
+        }
+        logger.debug("Classify would return activity: {}", activityStringValue);
+        ItemPreference classifiedActivity = new ItemPreferenceDouble(activityItem, 0);
+        return new MachineLearningResultImpl(classifiedActivity);
+      case GOAL_PREFERENCE_BRIGHTNESS_IRIS:
+//        String[] preference = {result[1], result[2]};
+        // FIXME what is the meaning of result[1] and result[2]
+        Item iris1 = resolve(this.root.getOpenHAB2Model(), "iris1_item");
+        int color = 0;
+        int brightness = 0;
+        if (preference_result != null){
+          color = Math.round(Float.valueOf(preference_result[0]));
+          brightness = Math.round(Float.valueOf(preference_result[1]));
+        }
+
+        ItemPreference classifiedPreference = new ItemPreferenceColor(iris1, TupleHSB.of(color, 100, brightness));
+        return new MachineLearningResultImpl(classifiedPreference);
+      default:
+        logger.error("Unknown goal value ({}) set in classify", this.goal);
+        return new EmptyMachineLearningResult();
+    }
+  }
+
+  public void initActivities(String filenameOfCsv) {
+    logger.debug(filenameOfCsv);
+    learner.activity_train(filenameOfCsv);
+  }
+
+  public void initPreferences(String filenameOfCsv) {
+    learner.preference_train(filenameOfCsv);
+  }
+
+  class EmptyMachineLearningResult implements MachineLearningResult {
+
+    @Override
+    public List<ItemPreference> getPreferences() {
+      return Collections.emptyList();
+    }
+  }
+
+}
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningResultImpl.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningResultImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..61d483a566255d51ce424d23adb014df1eec8109
--- /dev/null
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningResultImpl.java
@@ -0,0 +1,26 @@
+package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
+
+import de.tudresden.inf.st.eraser.jastadd.model.ItemPreference;
+import de.tudresden.inf.st.eraser.jastadd.model.MachineLearningResult;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * TODO: Add description.
+ *
+ * @author rschoene - Initial contribution
+ */
+public class MachineLearningResultImpl implements MachineLearningResult {
+
+  private final ItemPreference preference;
+
+  MachineLearningResultImpl(ItemPreference preference) {
+    this.preference = preference;
+  }
+
+  @Override
+  public List<ItemPreference> getPreferences() {
+    return Collections.singletonList(preference);
+  }
+}
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java
index 8ef9e85f7e0bcb95e5f430e87fe48ac81fad2733..2580847d5ace8e832bde76159dad2e85974115a2 100644
--- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java
@@ -1,6 +1,9 @@
 package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
 
-import de.tudresden.inf.st.eraser.jastadd.model.*;
+import org.encog.util.csv.CSVFormat;
+import org.encog.util.csv.ReadCSV;
+
+import java.util.Arrays;
 
 public class Main {
 
@@ -8,22 +11,154 @@ public class Main {
     /**
      * new data from KB
      * */
-    String[] new_data = new String[7];
-    new_data[0]="7";
-    new_data[1]="20";
-    new_data[2]="12";
-    new_data[3]="13";
-    new_data[4]="7";
-    new_data[5]="25";
-    new_data[6]="12";
+    //ReaderCSV reader = new ReaderCSV("datasets/backup/activity_data.csv","preference");
+    //reader.updater();
+    Learner learner=new Learner();
+    //learner.preference_train("../datasets/backup/preference_data.csv");
+    //learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv");
+    //0.5793968,1.2126632,-4.6244006,-0.030779,0.801127,0.590978,-3.1411927,-0.93373865,-0.31124622,-0.35992432,0.33746338,-0.79608154,dancing
+    /**String[] new_data = new String[12];
+    new_data[0]="0.5793968";
+    new_data[1]="1.2126632";
+    new_data[2]="-4.6244006";
+    new_data[3]="-0.030779";
+    new_data[4]="0.801127";
+    new_data[5]="0.590978";
+    new_data[6]="-3.1411927";
+    new_data[7]="-0.93373865";
+    new_data[8]="-0.31124622";
+    new_data[9]="-0.35992432";
+    new_data[10]="0.33746338";
+    new_data[11]="-0.79608154";
+
+    String result =learner.activity_predictor(new_data);
+    System.out.println(result);
+
+    List k=new ArrayList();
+
+    k.add(new_data);*/
+
+    //learner.preference_train("datasets/backup/preference_data.csv");
+    //learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv");
+    //walking,medium,120,70
+    //reading,bright,180,0
+
+    //activity_validation_learner();
+    //0.10654198,8.6574335,4.414908,0.040269,0.516884,0.853285,1.2066777,-1.1444284,9.648633,1.2207031E-4,-0.055358887,0.5834961 working
+    String[] new_data = new String[12];
+    new_data[0]="0.010773907";
+    new_data[1]="8.610746";
+    new_data[2]="4.4963107";
+    new_data[3]="0.047136";
+    new_data[4]="0.515427";
+    new_data[5]="0.852877";
+    new_data[6]="0.9720459";
+    new_data[7]="-1.3694834";
+    new_data[8]="9.696517";
+    new_data[9]="-0.0056152344";
+    new_data[10]="-0.049438477";
+    new_data[11]="0.5576782";
+    //0.010773907,8.610746,4.4963107,0.047136,0.515427,0.852877,0.9720459,-1.3694834,9.696517,-0.0056152344,-0.049438477,0.5576782 working
+    //0.9999999988939648,-0.9995820798966354,-0.9999999999999997,-0.9999988062118802,-0.9974031940544938,-1.0
+
+    //String result =learner.activity_predictor(new_data);
+    //System.out.println(result);
+
+    /**String[] new_data_1 =new String[12];
+    //-2.6252422,8.619126,-2.7030537,0.552147,0.5078,0.450302,-8.1881695,-1.2641385,0.038307227,-0.34222412,0.49102783,-0.016540527,walking
+    new_data_1[0]="-2.6252422";
+    new_data_1[1]="8.619126";
+    new_data_1[2]="-2.7030537";
+    new_data_1[3]="0.552147";
+    new_data_1[4]="0.5078";
+    new_data_1[5]="0.450302";
+    new_data_1[6]="-8.1881695";
+    new_data_1[7]="-1.2641385";
+    new_data_1[8]="0.038307227";
+    new_data_1[9]="-0.34222412";
+    new_data_1[10]="0.49102783";
+    new_data_1[11]="-0.016540527";
+    String result1 =learner.activity_predictor(new_data_1);
+    System.out.println(result1);
     /**
      * learner.train(activity_csv_url, preference_data_url)
      * learner.predictor get the result from predictor for new data
      * */
+    /**String[] new_data_2 = new String[12];
+    //-6.5565214,5.717354,5.6658783,0.185591,0.464146,0.413321,-20.580557,3.8498764,-0.4261679,0.7647095,-0.4713745,0.23999023,dancing
+    new_data_2[0]="-6.5565214";
+    new_data_2[1]="5.717354";
+    new_data_2[2]="5.6658783";
+    new_data_2[3]="0.185591";
+    new_data_2[4]="0.464146";
+    new_data_2[5]="0.413321";
+    new_data_2[6]="-20.580557";
+    new_data_2[7]="3.8498764";
+    new_data_2[8]="-0.4261679";
+    new_data_2[9]="0.7647095";
+    new_data_2[10]="-0.4713745";
+    new_data_2[11]="0.23999023";
+
+    String[] new_data_3 = new String[12];
+    new_data_3[0]="-5.3881507";
+    new_data_3[1]="0.25378537";
+    new_data_3[2]="7.69257";
+    new_data_3[3]="-0.122974";
+    new_data_3[4]="0.247411";
+    new_data_3[5]="0.439031";
+    new_data_3[6]="4.9224787";
+    new_data_3[7]="-10.601525";
+    new_data_3[8]="-4.927267";
+    new_data_3[9]="0.7946167";
+    new_data_3[10]="0.35272217";
+    new_data_3[11]="0.16192627";
+    //"-5.3881507","0.25378537","7.69257","-0.122974","0.247411","0.439031","4.9224787","-10.601525","-4.927267","0.7946167","0.35272217","0.16192627","lying"
     Learner learner=new Learner();
-    //learner.train("datasets/activity_data.csv", "datasets/preference_data.csv");
-    String[] result = learner.predictor(new_data);
+    //learner.train("datasets/backup/activity_data.csv", "datasets/preference_data.csv");
+    String[] result = learner.predictor(new_data_3);
     System.out.println("activity is:" + result[0]);
-    System.out.println("perference is: "+ result[1]);
+    //System.out.println("perference is: "+ result[1]);**/
+  }
+  public static void activity_validation_learner(){
+    ReadCSV csv = new ReadCSV("datasets/backup/activity_data.csv", false, CSVFormat.DECIMAL_POINT);
+    String[] line = new String[12];
+    Learner learner=new Learner();
+    int wrong=0;
+    int right=0;
+    while(csv.next()) {
+      StringBuilder result = new StringBuilder();
+      line[0] = csv.get(0);
+      line[1] = csv.get(1);
+      line[2] = csv.get(2);
+      line[3] = csv.get(3);
+      line[4] = csv.get(4);
+      line[5] = csv.get(5);
+      line[6] = csv.get(6);
+      line[7] = csv.get(7);
+      line[8] = csv.get(8);
+      line[9] = csv.get(9);
+      line[10] = csv.get(10);
+      line[11] = csv.get(11);
+      String correct = csv.get(12);
+      String irisChosen = learner.predictor(line)[0];
+      result.append(Arrays.toString(line));
+      result.append(" -> predicted: ");
+      result.append(irisChosen);
+      result.append("(correct: ");
+      result.append(correct);
+      result.append(")");
+      if (irisChosen.equals(correct)!=true){
+        System.out.println(correct);
+        System.out.println(irisChosen);
+        ++wrong;
+      }else{
+        ++right;
+      }
+      System.out.println(result.toString());
+    }
+    System.out.println("wrong number"+wrong);
+    System.out.println("right number"+right);
+    //double validation = (double(right))/(double(wrong+right));
+    //System.out.println("%.2f"+validation);
   }
 }
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/ReaderCSV.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/ReaderCSV.java
new file mode 100644
index 0000000000000000000000000000000000000000..76c1ce791b00843befc9ed8b9d0f1941532ac386
--- /dev/null
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/ReaderCSV.java
@@ -0,0 +1,116 @@
+package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
+
+import java.awt.*;
+import java.io.FileReader;
+import java.io.*;
+import java.util.Arrays;
+
+import com.opencsv.CSVReader;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.HttpResponse;
+import org.apache.http.entity.ContentType;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.ReentrantLock;
+
+public class ReaderCSV{
+
+    //read every 5 s from csv
+    //activity CSV
+    /**
+     * Col 1: smartphone acceleration x
+     * Col 2: smartphone acceleration y
+     * Col 3: smartphone acceleration z
+     * Col 4: smartphone rotation x
+     * Col 5: smartphone rotation y
+     * Col 6: smartphone rotation z
+     * Col 7: watch acceleration x
+     * Col 8: watch acceleration y
+     * Col 9: watch acceleration z
+     * Col 10: watch rotation x
+     * Col 11: watch rotation y
+     * Col 12: watch rotation z/*/
+    //preference CSV
+    /**
+     * Col 1: Activity
+     * Col 2: watch brightness range "bright, medium, dimmer, dark"*/
+
+    private static int TIME_PERIOD = 5000; //5 second update new value
+    private String csv_file_path;
+    private String csv_typ;
+    private File file;
+    private FileReader file_reader;
+    private CSVReader csv_reader;
+    private String[] next_record;
+    private static final Logger logger = LogManager.getLogger(ReaderCSV.class);
+    private static final String ERASER_ITEM_URI = "http://localhost:4567/model/items/";
+    //TODO ITEM_NAME HAS TO BE DISCUSSED
+    private static final String[] ACTIVITY_ITEM_NAME = {
+            "m_accel_x", "m_accel_y", "m_accel_z", "m_rotation_x",
+            "m_rotation_y", "m_rotation_z", "w_accel_x", "w_accel_y",
+            "w_accel_z", "w_rotation_x", "w_rotation_y", "w_rotation_z"};
+    private static final String[] PREFERENCE_ITEM_NAME = {
+           "w_brightness"
+    };
+
+    //csv_type is activity or preference
+    public ReaderCSV(String csv_file_path, String csv_type) {
+        this.csv_file_path = csv_file_path;
+        this.csv_typ = csv_type;
+    }
+
+    public void updater(){
+        file=new File(csv_file_path);
+        try {
+            file_reader =new FileReader(file);
+            csv_reader = new CSVReader(file_reader);
+            while ((next_record = csv_reader.readNext()) != null) {
+                Thread.sleep(TIME_PERIOD);
+                if (csv_typ =="activity"){
+                    String[] values = Arrays.copyOf(next_record,12);
+                    setNewValue(values, ACTIVITY_ITEM_NAME);
+
+               } else {
+                    String[] values = Arrays.copyOf(next_record,2);
+                    setNewValue(values, PREFERENCE_ITEM_NAME);
+                    }
+                }
+            }
+        catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+    private void setNewValue(String[] values, String[] name){
+        if(this.csv_typ.equals("activity"))
+        {
+            int i = 0;
+            for(String value : values){
+                String uri = ERASER_ITEM_URI + name[i] + "/state";
+                logger.info("reader:",value);
+                try {
+                    HttpResponse httpResponse = Request.Put(uri)
+                            .bodyString(value, ContentType.TEXT_PLAIN)
+                            .execute().returnResponse();
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+                i+=1;
+            }
+
+        }else{
+            String uri= ERASER_ITEM_URI + "w_brightness" +"/state";
+            logger.info("reader:",values[1]);
+            try {
+                HttpResponse httpResponse = Request.Put(uri)
+                        .bodyString(values[1], ContentType.TEXT_PLAIN)
+                        .execute().returnResponse();
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/ATest.java b/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/ATest.java
deleted file mode 100644
index 45adf05d4acbbe801d7f9ced98e2173fdf1d259d..0000000000000000000000000000000000000000
--- a/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/ATest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
-
-import de.tudresden.inf.st.eraser.jastadd.model.*;
-import org.junit.Test;
-
-import java.util.Set;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.fail;
-
-/**
- * TODO: Add description.
- *
- * @author rschoene - Initial contribution
- */
-public class ATest {
-
-  @Test
-  public void test1() {
-    fail();
-  }
-}
diff --git a/feedbackloop.plan/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/plan/PlanImpl.java b/feedbackloop.plan/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/plan/PlanImpl.java
index 7175767134e29d3ab39e2c27cb0858d6cb4cb119..e7f256b2928dfbbdd35e48b2dbf5b1797eee727d 100644
--- a/feedbackloop.plan/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/plan/PlanImpl.java
+++ b/feedbackloop.plan/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/plan/PlanImpl.java
@@ -2,9 +2,7 @@ package de.tudresden.inf.st.eraser.feedbackloop.plan;
 
 import de.tudresden.inf.st.eraser.feedbackloop.api.Execute;
 import de.tudresden.inf.st.eraser.feedbackloop.api.Plan;
-import de.tudresden.inf.st.eraser.jastadd.model.Activity;
-import de.tudresden.inf.st.eraser.jastadd.model.ItemPreference;
-import de.tudresden.inf.st.eraser.jastadd.model.Root;
+import de.tudresden.inf.st.eraser.jastadd.model.*;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -38,9 +36,15 @@ public class PlanImpl implements Plan {
 
   @Override
   public void planToMatchPreferences(Activity activity) {
-    // TODO actually use activity
     logger.info("Plan got new activity [{}]: {}", activity.getIdentifier(), activity.getLabel());
     List<ItemPreference> preferences = knowledgeBase.currentPreferences();
+    knowledgeBase.getMachineLearningRoot().addChangeEvent(createRecognitionEvent(activity));
     informExecute(preferences);
   }
+
+  private ChangeEvent createRecognitionEvent(Activity activity) {
+    RecognitionEvent result = RecognitionEvent.createRecognitionEvent(knowledgeBase.getMachineLearningRoot().getActivityRecognition());
+    result.setActivity(activity);
+    return result;
+  }
 }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index fb7ef980f26942c36accd5674b80128f6cf43abe..030ec1f8a437a05e86702c10632c66340d98ba0f 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,6 @@
+#Tue May 07 14:40:56 CEST 2019
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
diff --git a/learner_test/.gitignore b/learner_test/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..84c048a73cc2e5dd24f807669eb99b0ce3123195
--- /dev/null
+++ b/learner_test/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/learner_test/build.gradle b/learner_test/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..64ba25868ab02f58ed90c006f52cfb3e9563c411
--- /dev/null
+++ b/learner_test/build.gradle
@@ -0,0 +1,35 @@
+repositories {
+    mavenCentral()
+}
+
+sourceCompatibility = 1.8
+
+apply plugin: 'java'
+apply plugin: 'application'
+
+dependencies {
+    compile project(':eraser-base')
+    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.8.1'
+    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.10.0'
+    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.10.0'
+    testCompile group: 'junit', name: 'junit', version: '4.12'
+    testCompile group: 'org.hamcrest', name: 'hamcrest-junit', version: '1.0.0.0'
+
+    compile 'org.encog:encog-core:3.4'
+}
+
+run {
+    mainClassName = 'de.tudresden.inf.st.eraser.learner_test.Main'
+    standardInput = System.in
+    if (project.hasProperty("appArgs")) {
+        args Eval.me(appArgs)
+    }
+}
+
+sourceSets {
+    main {
+        java {
+            srcDir 'src/main/java'
+        }
+    }
+}
diff --git a/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/Main.java b/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..62f00cb624f4dbae09c84bca772d09318f5c9964
--- /dev/null
+++ b/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/Main.java
@@ -0,0 +1,112 @@
+package de.tudresden.inf.st.eraser.learner_test;
+import org.encog.Encog;
+import org.encog.ml.MLClassification;
+import org.encog.ml.data.MLData;
+import org.encog.persist.EncogDirectoryPersistence;
+import org.encog.util.csv.CSVFormat;
+import org.encog.util.csv.ReadCSV;
+import org.encog.util.simple.EncogUtility;
+
+import org.encog.ml.data.versatile.NormalizationHelper;
+import org.encog.ml.data.versatile.VersatileMLDataSet;
+import org.encog.ml.data.versatile.columns.ColumnDefinition;
+import org.encog.ml.data.versatile.columns.ColumnType;
+import org.encog.ml.data.versatile.sources.VersatileDataSource;
+import org.encog.ml.data.versatile.sources.CSVDataSource;
+import org.encog.ml.factory.MLMethodFactory;
+import org.encog.ml.model.EncogModel;
+import org.encog.ConsoleStatusReportable;
+import org.encog.ml.MLRegression;
+import java.io.File;
+import java.util.Arrays;
+import static org.encog.persist.EncogDirectoryPersistence.*;
+
+public class Main {
+
+  public static void main(String[] args) {
+    //mapping the data into model
+    String savefile = "src/main/java/de/tudresden/inf/st/eraser/learner_test/save_model.eg";
+    String File = "src/main/java/de/tudresden/inf/st/eraser/learner_test/preference_data.csv";
+    File file = new File(File);
+    VersatileDataSource source = new CSVDataSource(file, false, CSVFormat.DECIMAL_POINT);
+    VersatileMLDataSet data = new VersatileMLDataSet(source);
+    data.defineSourceColumn("monat", 0, ColumnType.continuous);
+    data.defineSourceColumn("day", 1, ColumnType.continuous);
+    data.defineSourceColumn("hour", 2, ColumnType.continuous);
+    data.defineSourceColumn("minute", 3, ColumnType.continuous);
+    ColumnDefinition outputColumn = data.defineSourceColumn("labels", 4, ColumnType.continuous);
+    data.defineSingleOutputOthersInput(outputColumn);
+    data.analyze();
+    System.out.println("get data ");
+    EncogModel model = new EncogModel(data);
+    model.selectMethod(data, MLMethodFactory.TYPE_FEEDFORWARD);
+    //model.setReport(new ConsoleStatusReportable());
+    data.normalize();
+    NormalizationHelper helper = data.getNormHelper();
+    System.out.println(helper.toString());
+    model.holdBackValidation(0.3, true, 1001);
+    model.selectTrainingType(data);
+    MLRegression bestMethod = (MLRegression)model.crossvalidate(5, true);
+    MLClassification bestMethodtest=(MLClassification)model.crossvalidate(5,true);
+    /**System.out.println( "Training error: " + EncogUtility.calculateRegressionError(bestMethod, model.getTrainingDataset()));
+    System.out.println( "testTraining error: " + EncogUtility.calculateClassificationError(bestMethodtest, model.getTrainingDataset()));
+    System.out.println( "Validation error: " + EncogUtility.calculateRegressionError(bestMethod, model.getValidationDataset()));
+    System.out.println( "testValidation error: " + EncogUtility.calculateClassificationError(bestMethodtest, model.getValidationDataset()));
+
+    System.out.println(helper.getClass());
+    System.out.println(helper.toString());
+    System.out.println("Final model: " + bestMethod);
+    System.out.println("Final testmodel: " + bestMethodtest);**/
+    //NormalizationHelper helper = data.getNormHelper();
+
+    //test
+    String helperstr=helper.toString();
+    String [] split=helperstr.split(";");
+    String [] finalStr = split[split.length-1].replace("]","").replace("[","").
+            split(",");
+    System.out.println(helper);
+
+    // save network...
+    //to delete
+    saveObject(new File(savefile), bestMethodtest);
+    ReadCSV csv = new ReadCSV(File, false, CSVFormat.DECIMAL_POINT);
+    String[] line = new String[4];
+    MLData input = helper.allocateInputVector();
+    System.out.println("input test---------------");
+    System.out.println(input);
+    while(csv.next()) {
+      StringBuilder result = new StringBuilder();
+      line[0] = csv.get(0);
+      line[1] = csv.get(1);
+      line[2] = csv.get(2);
+      line[3] = csv.get(3);
+      String correct = csv.get(4);
+      helper.normalizeInputVector(line,input.getData(),false);
+
+      MLData output = bestMethod.compute(input);
+      System.out.println("inputs:");
+      System.out.println(input);
+      System.out.println("outputs:");
+      System.out.println(output);
+      String brightnessChosen = helper.denormalizeOutputVectorToString(output)[0];
+
+      result.append(Arrays.toString(line));
+      result.append(" -> predicted: ");
+      result.append(brightnessChosen);
+      result.append("(correct: ");
+      result.append(correct);
+      result.append(")");
+      System.out.println(result.toString());
+      break;
+
+    }
+    // Delete data file and shut down.
+    //File.delete();
+    Encog.getInstance().shutdown();
+    /**Training error: 0.299928703107046
+    testTraining error: 0.9931740614334471
+    Validation error: 0.41277024952020763
+    testValidation error: 0.992*/
+
+  }
+}
diff --git a/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/final_data.csv b/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/final_data.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a1e263194d3ee4f95c64c3eff3b5123fb2246cf5
--- /dev/null
+++ b/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/final_data.csv
@@ -0,0 +1,418 @@
+7,20,12,13,2
+7,20,14,40,1
+7,20,14,40,2
+7,21,13,2,2
+7,21,13,2,2
+7,21,14,23,2
+7,21,14,23,2
+7,21,15,41,2
+7,21,16,54,2
+7,21,16,54,2
+7,21,17,45,3
+7,22,12,28,3
+7,22,15,35,2
+7,22,15,35,2
+7,22,18,59,3
+7,22,18,59,3
+7,23,12,32,2
+7,23,12,32,2
+7,23,16,7,2
+7,23,16,7,2
+7,23,16,7,2
+7,23,16,7,2
+7,23,16,7,2
+7,24,12,4,0
+7,24,12,4,0
+7,24,12,4,1
+7,24,14,38,2
+7,24,14,38,2
+7,24,18,54,3
+7,25,12,31,0
+7,25,12,32,1
+7,25,12,32,1
+7,25,15,6,3
+7,25,18,56,3
+7,26,13,41,2
+7,26,19,14,3
+7,27,11,39,2
+7,27,11,39,3
+7,27,11,46,3
+7,27,11,46,2
+7,27,13,8,2
+7,27,13,8,2
+7,27,13,9,2
+7,27,13,45,2
+7,27,13,45,2
+7,27,15,38,3
+7,28,12,12,2
+7,28,12,13,2
+7,28,12,41,2
+7,28,12,41,2
+7,28,12,41,2
+7,28,14,0,1
+7,28,14,0,2
+7,28,15,21,3
+7,28,18,56,3
+7,29,10,9,1
+7,29,10,9,1
+7,29,10,9,1
+7,29,11,54,0
+7,29,11,54,0
+7,29,11,54,0
+7,29,11,54,1
+7,29,14,10,2
+7,29,16,44,2
+7,29,16,44,2
+7,30,16,7,3
+7,30,18,45,3
+7,31,13,2,0
+7,31,13,2,1
+7,31,13,3,1
+7,31,13,3,1
+7,31,13,3,1
+7,31,18,39,3
+8,1,12,22,0
+8,1,12,22,1
+8,1,14,20,2
+8,1,14,20,2
+8,1,14,20,2
+8,1,15,55,3
+8,1,18,31,3
+8,1,18,37,3
+8,1,18,37,3
+8,1,19,2,3
+8,1,19,2,3
+8,1,20,5,3
+8,2,10,9,2
+8,2,10,9,1
+8,2,10,9,2
+8,2,10,9,2
+8,2,13,58,2
+8,2,13,58,2
+8,2,15,44,3
+8,2,15,44,3
+8,2,15,44,3
+8,2,17,21,3
+8,2,17,21,3
+8,2,17,21,3
+8,3,13,31,1
+8,3,13,31,2
+8,3,13,32,2
+8,3,16,43,3
+8,4,13,20,1
+8,4,13,20,2
+8,4,18,27,3
+8,5,13,37,2
+8,5,13,37,2
+8,5,18,33,3
+8,6,11,24,3
+8,6,11,24,3
+8,6,11,24,3
+8,6,13,50,3
+8,7,13,4,2
+8,7,13,4,2
+8,7,14,56,3
+8,8,12,13,2
+8,8,12,13,2
+8,8,15,51,2
+8,8,15,51,2
+8,8,15,51,3
+8,9,13,32,2
+8,9,13,32,2
+8,9,13,32,2
+8,9,15,8,2
+8,9,15,8,2
+8,9,15,8,2
+8,9,16,19,2
+8,10,11,32,0
+8,10,11,32,1
+8,10,11,32,1
+8,10,13,13,1
+8,10,13,13,1
+8,10,13,13,2
+8,10,16,42,3
+8,10,16,42,3
+8,11,14,6,2
+8,11,14,7,2
+8,11,18,54,3
+8,11,18,54,3
+8,11,18,54,3
+8,12,12,27,1
+8,12,12,27,1
+8,12,12,28,1
+8,12,13,53,2
+8,12,13,53,2
+8,12,13,53,2
+8,12,15,21,3
+8,13,13,16,1
+8,13,13,16,1
+8,13,13,16,1
+8,13,14,14,2
+8,13,14,14,2
+8,13,16,11,3
+8,13,17,18,3
+8,14,13,7,1
+8,14,13,7,1
+8,14,13,7,1
+8,14,13,7,1
+8,14,13,7,2
+8,14,13,7,2
+8,14,15,6,3
+8,15,14,5,2
+8,15,14,5,2
+8,15,14,6,2
+8,15,14,6,2
+8,15,16,41,3
+8,15,16,41,3
+8,15,17,30,3
+8,16,13,40,2
+8,16,13,40,2
+8,16,17,52,3
+8,16,17,53,3
+8,17,13,34,1
+8,17,13,35,2
+8,17,14,7,2
+8,17,19,2,3
+8,18,10,21,3
+8,18,11,14,2
+8,18,11,14,2
+8,18,11,14,2
+8,18,11,14,2
+8,18,14,25,2
+8,18,14,25,3
+8,18,14,25,2
+8,18,18,18,3
+8,18,18,19,3
+8,19,18,33,3
+8,19,18,33,3
+8,19,18,33,3
+8,19,18,33,3
+8,20,14,28,2
+8,20,14,28,2
+8,20,14,28,2
+8,20,14,28,2
+8,20,17,8,3
+8,20,18,22,3
+8,21,11,24,1
+8,21,11,24,1
+8,21,11,24,1
+8,21,15,34,3
+8,21,18,55,3
+8,22,12,3,1
+8,22,12,4,2
+8,22,12,4,2
+8,22,13,51,2
+8,22,13,51,2
+8,22,13,51,2
+8,22,18,12,3
+8,22,18,12,3
+8,22,18,12,3
+8,22,18,12,3
+8,22,18,40,3
+8,22,18,40,3
+8,23,13,42,1
+8,23,13,42,1
+8,23,17,32,3
+8,23,19,28,3
+8,23,20,27,3
+8,23,20,27,3
+8,23,21,49,3
+8,24,14,0,2
+8,24,14,0,2
+8,24,14,0,2
+8,24,14,0,2
+8,24,15,4,3
+8,24,15,4,3
+8,24,16,2,3
+8,24,16,3,3
+8,24,16,37,3
+8,24,17,9,3
+8,24,17,14,3
+8,25,13,34,1
+8,25,13,34,1
+8,25,13,34,1
+8,25,13,34,1
+8,25,13,34,1
+8,25,15,1,3
+8,25,17,58,3
+8,26,10,29,0
+8,26,10,29,0
+8,26,10,29,0
+8,26,10,29,0
+8,26,10,29,0
+8,26,16,42,3
+8,26,16,42,3
+8,26,18,41,3
+8,26,18,41,3
+8,27,13,41,2
+8,27,13,41,2
+8,27,13,41,2
+8,27,13,41,2
+8,27,17,42,3
+8,28,11,9,1
+8,28,11,9,1
+8,28,12,14,0
+8,28,12,14,1
+8,28,12,14,0
+8,28,15,3,2
+8,28,15,3,2
+8,28,16,31,3
+8,28,17,40,3
+8,29,14,44,3
+8,29,17,25,3
+8,30,12,5,0
+8,30,12,5,0
+8,30,12,5,0
+8,30,13,32,1
+8,30,13,32,1
+8,30,13,56,2
+8,30,14,23,2
+8,30,14,23,2
+8,30,14,23,2
+8,30,14,23,2
+8,30,14,41,2
+8,30,14,41,2
+8,30,14,41,2
+8,30,15,50,3
+8,30,17,0,3
+8,30,18,59,3
+8,30,18,59,3
+8,31,14,31,2
+8,31,14,31,2
+8,31,14,31,2
+8,31,17,59,3
+8,31,18,0,3
+9,1,16,13,3
+9,1,16,13,3
+9,1,16,13,3
+9,1,17,41,3
+9,2,13,44,1
+9,2,13,44,1
+9,2,13,44,1
+9,2,14,49,2
+9,2,14,49,2
+9,2,14,49,2
+9,2,16,6,3
+9,2,16,6,3
+9,2,17,2,3
+9,3,16,9,3
+9,3,17,35,3
+9,3,17,36,3
+9,4,12,57,1
+9,4,12,57,1
+9,4,15,8,3
+9,4,15,34,3
+9,4,16,26,3
+9,4,16,26,3
+9,4,18,37,3
+9,4,18,37,3
+9,4,18,37,3
+9,6,11,18,0
+9,6,11,18,0
+9,6,12,54,1
+9,6,12,54,1
+9,6,14,21,2
+9,6,14,21,2
+9,6,19,20,3
+9,7,11,50,0
+9,7,14,17,2
+9,7,14,57,3
+9,7,14,57,3
+9,7,16,56,3
+9,7,16,56,3
+9,7,16,56,3
+9,7,16,56,3
+9,7,18,38,3
+9,7,18,38,3
+9,8,11,4,2
+9,8,11,4,2
+9,8,11,13,0
+9,8,11,13,0
+9,8,11,13,0
+9,8,11,13,0
+9,8,11,13,0
+9,8,11,14,0
+9,8,11,14,1
+9,8,11,14,1
+9,8,12,1,0
+9,8,12,1,0
+9,8,12,1,0
+9,8,12,1,0
+9,8,12,1,0
+9,8,12,1,1
+9,8,12,36,0
+9,8,12,36,0
+9,8,12,36,0
+9,8,12,36,0
+9,8,12,36,0
+9,8,13,37,1
+9,8,13,37,1
+9,8,13,37,1
+9,8,14,20,2
+9,8,14,20,2
+9,8,18,20,3
+9,9,12,47,1
+9,9,12,47,2
+9,9,12,47,2
+9,9,19,5,3
+9,10,13,15,1
+9,10,13,15,1
+9,10,13,15,0
+9,10,16,49,3
+9,10,19,6,3
+9,10,21,5,3
+9,11,14,16,2
+9,11,14,16,2
+9,11,14,16,2
+9,11,18,41,3
+9,12,14,43,2
+9,12,14,43,2
+9,12,14,43,2
+9,12,16,14,3
+9,12,17,12,3
+9,12,17,12,2
+9,12,17,12,3
+9,12,17,12,2
+9,12,20,44,3
+9,13,19,52,3
+9,14,14,39,2
+9,14,14,39,2
+9,14,15,14,3
+9,14,17,29,3
+9,14,17,29,3
+9,14,17,29,3
+9,15,11,41,1
+9,15,11,41,1
+9,15,13,4,1
+9,15,14,3,1
+9,15,14,3,2
+9,16,12,36,1
+9,16,12,36,1
+9,16,12,36,1
+9,16,12,36,1
+9,16,12,48,1
+9,16,12,48,1
+9,16,13,51,1
+9,16,13,51,2
+9,16,13,51,1
+9,16,15,13,3
+9,16,15,14,3
+9,16,15,14,3
+9,17,10,27,0
+9,17,10,27,0
+9,17,11,10,0
+9,17,11,10,0
+9,17,11,10,0
+9,17,12,43,1
+9,17,12,43,1
+9,17,12,43,1
+9,17,13,32,1
+9,17,13,32,1
+9,17,14,5,1
+9,17,14,5,2
+9,17,14,6,2
+9,17,15,7,3
+9,17,15,49,3
+9,17,15,49,3
+9,17,18,12,3
+9,17,18,13,3
diff --git a/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/save_model.eg b/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/save_model.eg
new file mode 100644
index 0000000000000000000000000000000000000000..47c37ff28ef95b7b22a2df05ec050c3ffeb53a30
--- /dev/null
+++ b/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/save_model.eg
@@ -0,0 +1,24 @@
+encog,BasicNetwork,java,3.4.0,1,1554196571101
+[BASIC]
+[BASIC:PARAMS]
+[BASIC:NETWORK]
+beginTraining=0
+connectionLimit=0
+contextTargetOffset=0,0,0
+contextTargetSize=0,0,0
+endTraining=2
+hasContext=f
+inputCount=4
+layerCounts=1,8,5
+layerFeedCounts=1,7,4
+layerContextCount=0,0,0
+layerIndex=0,1,9
+output=0.2537517424,0.3154675575,-0.8739039638,-0.4408848221,-0.8484433638,-0.999915299,-0.6964984771,-0.208278439,1,0,0,-0.4545454545,0.3559322034,1
+outputCount=1
+weightIndex=0,8,43
+weights=0.5976774048,-0.7925906525,0.7127327881,-0.9611660362,0.8031350986,-0.7286657218,1.0990482817,-0.5985785536,-0.0783115433,0.575612931,1.1267500918,1.7184744034,0.2271044512,-1.0525796764,0.0900869671,1.1492323512,0.6141715555,-1.0455927965,-0.0925453451,0.2471651431,2.3634316872,0.3939369257,0.4607437082,-0.1435186798,0.8428535365,-0.0848896791,-0.070602589,-1.2640263565,2.4899996734,-0.2185394776,10.3421332361,-0.1650898311,-0.2750133571,-0.79680959,-0.8051139953,0.8219933747,-0.0727160299,-0.4609522002,-1.0410685492,-0.5354063412,0.3028724456,-0.6835374219,0.169591233
+biasActivation=0,1,1
+[BASIC:ACTIVATION]
+"org.encog.engine.network.activation.ActivationTANH"
+"org.encog.engine.network.activation.ActivationTANH"
+"org.encog.engine.network.activation.ActivationLinear"
diff --git a/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/save_model_test.eg b/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/save_model_test.eg
new file mode 100644
index 0000000000000000000000000000000000000000..62fe6421d95e164aa14e123b950e831e37a5f23c
--- /dev/null
+++ b/learner_test/src/main/java/de/tudresden/inf/st/eraser/learner_test/save_model_test.eg
@@ -0,0 +1,24 @@
+encog,BasicNetwork,java,3.4.0,1,1548158734516
+[BASIC]
+[BASIC:PARAMS]
+[BASIC:NETWORK]
+beginTraining=0
+connectionLimit=0
+contextTargetOffset=0,0,0
+contextTargetSize=0,0,0
+endTraining=2
+hasContext=f
+inputCount=4
+layerCounts=4,8,5
+layerFeedCounts=4,7,4
+layerContextCount=0,0,0
+layerIndex=0,4,12
+output=0.6991387348,-0.8711034513,-0.996886038,-0.832747291,-0.0935682806,-0.9996163977,0.5399150265,0.9411173394,-0.5084989975,0.4850010791,0.9999999957,1,0,-0.6666666667,-0.4545454545,0.6949152542,1
+outputCount=4
+weightIndex=0,32,67
+weights=-2.6901880743,0.6512821123,-1.2270002115,1.63124668,0.1982387305,-0.2994789552,1.5833040739,-0.9450411677,2.0541422847,-0.718279397,-1.1761952241,0.5028631512,0.0690323612,-1.496141565,-0.1955149568,-0.7453976822,-0.3691141073,0.9854755554,2.2113850088,-1.5216550292,0.9652087936,-1.3028209693,-1.3346156171,0.4142247818,1.0821207364,0.1987534858,0.6202881884,-0.2940331887,-1.4643282498,2.6960334656,-0.0167663298,-2.9907087565,0.3469960227,-0.0441249736,-2.5998575813,-0.7106361301,-0.8111809962,2.2216158678,-0.5482762437,-1.7996398291,-3.6734127565,-2.9102547958,0.4845401914,0.3760471288,-0.0124987546,0.3784047483,0.5860932613,-0.2682876707,0.7429004186,-7.559247176,-3.4421363532,1.1989747484,-2.3340717496,-1.4740773042,-0.7795788072,-1.8241693655,-0.630132295,-0.8191869009,-0.4060569987,-1.0997423162,-0.5495165849,0.1407829068,-2.2964930412,0.0798893221,-19.5271913755,2.0474187009,-0.2622671892
+biasActivation=0,1,1
+[BASIC:ACTIVATION]
+"org.encog.engine.network.activation.ActivationTANH"
+"org.encog.engine.network.activation.ActivationTANH"
+"org.encog.engine.network.activation.ActivationLinear"
diff --git a/learner_test/src/main/resources/log4j2.xml b/learner_test/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0594576fac98ba859e411597c90c8e3d989378bd
--- /dev/null
+++ b/learner_test/src/main/resources/log4j2.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <Console name="Console">
+            <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} %-5level} %c{1.} - %msg%n"/>
+        </Console>
+        <RollingFile name="RollingFile" fileName="logs/jastadd-mquat.log"
+                    filePattern="logs/jastadd-mquat-%i.log">
+            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
+            <Policies>
+                <OnStartupTriggeringPolicy/>
+            </Policies>
+            <DefaultRolloverStrategy max="20"/>
+        </RollingFile>
+    </Appenders>
+    <Loggers>
+        <Root level="debug">
+            <AppenderRef ref="Console"/>
+            <AppenderRef ref="RollingFile"/>
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/make-new-project.py b/make-new-project.py
index afd3a51931e3a7dc6823d47e1b9c97a65a2a2e76..635755567333e0d326ff346d5852d7d62437bbcb 100755
--- a/make-new-project.py
+++ b/make-new-project.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python2.7
 import argparse
 import os
 import shutil
diff --git a/ml_test_boqi/.gitignore b/ml_test_boqi/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..70b583e34c3316bcd77c807e2d6b85db5e7d49f6
--- /dev/null
+++ b/ml_test_boqi/.gitignore
@@ -0,0 +1,3 @@
+/build/
+/bin/
+logs/
diff --git a/ml_test_boqi/build.gradle b/ml_test_boqi/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..d07b5930b7d3c75216b36bb9f5d9fa08b5d9d2c0
--- /dev/null
+++ b/ml_test_boqi/build.gradle
@@ -0,0 +1,33 @@
+repositories {
+    mavenCentral()
+}
+
+sourceCompatibility = 1.8
+
+apply plugin: 'java'
+apply plugin: 'application'
+
+dependencies {
+    compile project(':eraser-base')
+    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.8'
+    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.1'
+    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.1'
+    testCompile group: 'junit', name: 'junit', version: '4.12'
+    testCompile group: 'org.hamcrest', name: 'hamcrest-junit', version: '2.0.0.0'
+}
+
+run {
+    mainClassName = 'de.tudresden.inf.st.eraser.ml_test_boqi.Main'
+    standardInput = System.in
+    if (project.hasProperty("appArgs")) {
+        args Eval.me(appArgs)
+    }
+}
+
+sourceSets {
+    main {
+        java {
+            srcDir 'src/main/java'
+        }
+    }
+}
diff --git a/ml_test_boqi/src/main/java/de/tudresden/inf/st/eraser/ml_test_boqi/Main.java b/ml_test_boqi/src/main/java/de/tudresden/inf/st/eraser/ml_test_boqi/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..f42663472e3a986c82df86e4bf89d0f9ff706441
--- /dev/null
+++ b/ml_test_boqi/src/main/java/de/tudresden/inf/st/eraser/ml_test_boqi/Main.java
@@ -0,0 +1,219 @@
+package de.tudresden.inf.st.eraser.ml_test_boqi;
+
+import de.tudresden.inf.st.eraser.jastadd.model.*;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import org.apache.commons.math3.stat.StatUtils;
+import de.tudresden.inf.st.eraser.jastadd.model.Item;
+
+
+public class Main {
+
+  private static final Logger logger = LogManager.getLogger(Main.class);
+
+  public static void main(String[] args) {
+
+    logger.info("Hello World!");
+    createAndTestBrightnessNetwork();
+  }
+  private static Root createModel() {
+    Root model = Root.createEmptyRoot();
+    Group group = new Group();
+    group.setID("Group1");
+    model.addGroup(group);
+
+    // inputs items muss normalize 1.0, 0.06666666666666665, 0.4545454545454546, -0.5593220338983051, 1(bias)
+
+    NumberItem monthItem = new NumberItem();
+    monthItem.setState(-1.0);
+    monthItem.setID("month");
+    monthItem.setLabel("datetime-month");
+
+    NumberItem dayItem = new NumberItem();
+    dayItem.setState(0.2666666666666666);
+    dayItem.setID("day");
+    dayItem.setLabel("datetime-day");
+
+    NumberItem hourItem = new NumberItem();
+    hourItem.setState(-0.6363636363636364);
+    hourItem.setID("hour");
+    hourItem.setLabel("datetime-hour");
+
+    NumberItem minuteItem = new NumberItem();
+    minuteItem.setState(-0.5593220338983051);
+    minuteItem.setID("minute");
+    minuteItem.setLabel("datetime-minute");
+
+    NumberItem biasItem = new NumberItem();
+    biasItem.setState(1);
+    biasItem.setID("bias");
+    biasItem.setLabel("bias");
+
+    group.addItem(monthItem);
+    group.addItem(dayItem);
+    group.addItem(hourItem);
+    group.addItem(minuteItem);
+    group.addItem(biasItem);
+    return model;
+  }
+  private static final int REPETITIONS = 1;
+  private static void classifyTimed(
+          NeuralNetworkRoot nn,
+          Function<NeuralNetworkRoot, DoubleNumber> classify,
+          Function<DoubleNumber, String> leafToString) {
+    List<String> results = new ArrayList<>();
+    List<Long> times = new ArrayList<>();
+    long before = System.nanoTime();
+    DoubleNumber classification = classify.apply(nn);
+    long diff = System.nanoTime() - before;
+    results.add(leafToString.apply(classification));
+    times.add(TimeUnit.NANOSECONDS.toMillis(diff));
+    logger.info("Classification results: {}", results);
+    logger.info("Took {}ms", String.join("ms, ", times.stream().map(l -> Long.toString(l)).collect(Collectors.toList())));
+    logger.info("Took on average: {}ms",
+            Arrays.stream(times.toArray(new Long[0])).mapToLong(l -> l).average().orElse(-1));
+    logger.info("Took on median: {}ms",
+            Arrays.stream(times.toArray(new Long[0])).mapToLong(l -> l).sorted()
+                    .skip((REPETITIONS - 1) / 2).limit(2 - REPETITIONS % 2).average().orElse(Double.NaN));
+  }
+
+  /**
+   * Purpose: Create a neural network with 3 layers (5 + 8 + 4 neurons)
+   */
+  private static void createAndTestBrightnessNetwork() {
+    Root model = createModel();
+    Item monthItem = model.resolveItem("month").orElseThrow(
+            () -> new RuntimeException("Month not found"));
+    Item dayItem = model.resolveItem("day").orElseThrow(
+            () -> new RuntimeException("Day not found"));
+    Item hourItem = model.resolveItem("hour").orElseThrow(
+            () -> new RuntimeException("Hour not found"));
+    Item minuteItem = model.resolveItem("minute").orElseThrow(
+            () -> new RuntimeException("Minute not found"));
+    Item biasItem = model.resolveItem("bias").orElseThrow(
+            () -> new RuntimeException("Bias not found"));
+
+    NeuralNetworkRoot nn = new NeuralNetworkRoot();
+
+    DoubleArrayDoubleFunction sigmoid = inputs -> Math.signum(Arrays.stream(inputs).sum());
+    DoubleArrayDoubleFunction tanh= inputs ->Math.tanh(Arrays.stream(inputs).sum());
+    DoubleArrayDoubleFunction function_one= inputs->function_one();
+
+    //Weights outputs from learner Module
+    ArrayList<Double> weights= new ArrayList<Double>(Arrays.asList(
+            -4.8288886204,0.6723236931,2.1451097188,-0.8551053267,-0.7858304445,4.1369566727,-3.3096691918,
+            -0.2190980261,2.6871317298,1.2272772167,-2.5292510941,-1.2860407542,-4.2280191541,1.004752063,
+            0.8345207039,0.0123185817,-0.5921808915,0.0967336988,-0.305892589,0.5572392781,-0.7190098073,
+            -1.6247354373,0.4589248822,-0.0269816271,2.2208040852,-3.6281085698,0.2204999381,4.7263701556,
+            -4.8348948698,0.231141867,8.7120706018,-1.4912707741,0.9482851705,0.1377551973,-6.6525856465,
+            -1.321197315,-2.7369948929,17.664289214,-3.1279212743,-0.8245974167,-1.4251924355,0.8370511414,
+            2.0841638143,-0.210152817,-1.9414132298,-1.7973688846,-2.1977997794,-3.6046836685,-3.3403186721,
+            -6.1556924635,-2.8952903587,-1.0773989561,0.2300429028,-0.2184650371,0.0297181797,0.5709092417,
+            1.3960358442,-3.1577981239,0.0423944625,-17.8143314027,-1.4439317172,-0.5137688896,1.0166045804,
+            0.3059149818,1.0938282764,0.6203368549,0.702449827));
+    // input layer
+    InputNeuron month = new InputNeuron();
+    month.setItem(monthItem);
+    InputNeuron day = new InputNeuron();
+    day.setItem(dayItem);
+    InputNeuron hour = new InputNeuron();
+    hour.setItem(hourItem);
+    InputNeuron minute = new InputNeuron();
+    minute.setItem(minuteItem);
+    InputNeuron bias = new InputNeuron();
+    bias.setItem(biasItem);
+
+    nn.addInputNeuron(month);
+    nn.addInputNeuron(day);
+    nn.addInputNeuron(hour);
+    nn.addInputNeuron(minute);
+    nn.addInputNeuron(bias);
+
+    // output layer
+    OutputLayer outputLayer = new OutputLayer();
+    OutputNeuron output0 = new OutputNeuron();
+    output0.setActivationFormula(tanh);
+    OutputNeuron output1 = new OutputNeuron();
+    output1.setActivationFormula(tanh);
+    OutputNeuron output2 = new OutputNeuron();
+    output2.setActivationFormula(tanh);
+    OutputNeuron output3 = new OutputNeuron();
+    output3.setActivationFormula(tanh);
+
+    outputLayer.addOutputNeuron(output0);
+    outputLayer.addOutputNeuron(output1);
+    outputLayer.addOutputNeuron(output2);
+    outputLayer.addOutputNeuron(output3);
+
+    outputLayer.setCombinator(inputs->predictor(inputs));
+    nn.setOutputLayer(outputLayer);
+
+    // hidden layer
+    HiddenNeuron[] hiddenNeurons = new HiddenNeuron[8];
+    for (int i = 0; i < (hiddenNeurons.length); i++) {
+
+      if (i==7){
+        HiddenNeuron hiddenNeuron = new HiddenNeuron();
+        hiddenNeuron.setActivationFormula(function_one);
+        hiddenNeurons[i] = hiddenNeuron;
+        nn.addHiddenNeuron(hiddenNeuron);
+        bias.connectTo(hiddenNeuron,1.0);
+        hiddenNeuron.connectTo(output0, weights.get(i));
+        hiddenNeuron.connectTo(output1, weights.get(i+8));
+        hiddenNeuron.connectTo(output2, weights.get(i+8*2));
+        hiddenNeuron.connectTo(output3, weights.get(i+8*3));
+      }
+     else{
+        HiddenNeuron hiddenNeuron = new HiddenNeuron();
+        hiddenNeuron.setActivationFormula(tanh);
+        hiddenNeurons[i] = hiddenNeuron;
+        nn.addHiddenNeuron(hiddenNeuron);
+
+        month.connectTo(hiddenNeuron, weights.get((hiddenNeurons.length*4)+i*5));
+        day.connectTo(hiddenNeuron, weights.get((hiddenNeurons.length*4+1)+i*5));
+        hour.connectTo(hiddenNeuron, weights.get((hiddenNeurons.length*4+2)+i*5));
+        minute.connectTo(hiddenNeuron, weights.get((hiddenNeurons.length*4+3)+i*5));
+        bias.connectTo(hiddenNeuron,weights.get((hiddenNeurons.length*4+4)+i*5));
+        hiddenNeuron.connectTo(output0, weights.get(i));
+        hiddenNeuron.connectTo(output1, weights.get(i+8));
+        hiddenNeuron.connectTo(output2, weights.get(i+8*2));
+        hiddenNeuron.connectTo(output3, weights.get(i+8*3));}
+    }
+
+    model.getMachineLearningRoot().setPreferenceLearning(nn);
+    System.out.println(model.prettyPrint());
+
+    classifyTimed(nn, NeuralNetworkRoot::classify,
+            classification -> Double.toString(classification.number));
+  }
+  private static double function_one() {
+    return 1.0;
+  }
+  private static double predictor(double[] inputs) {
+    int index=0;
+    double maxinput=StatUtils.max(inputs);
+    System.out.println(inputs);
+    for (int i = 0; i < inputs.length; i++)
+    {
+      if (inputs[i] == maxinput){
+        index=i;
+      }
+    }
+    //outputs from learner
+    ArrayList<Double> outputs= new ArrayList<Double>(Arrays.asList(2.0,1.0,3.0,0.0));
+    double output=outputs.get(index);
+    return output;
+  }
+}
+
+//inputs:
+//[BasicMLData:-1.0,0.2666666666666666,-0.6363636363636364,-0.5593220338983051]
+//outputs:
+//[BasicMLData:-0.9151867668336432,-0.1568555041251098,-0.9786996639280675,-0.9436628188408074]
+//[7, 20, 12, 13] -> predicted: 1(correct: 2)
\ No newline at end of file
diff --git a/ml_test_boqi/src/main/resources/log4j2.xml b/ml_test_boqi/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0594576fac98ba859e411597c90c8e3d989378bd
--- /dev/null
+++ b/ml_test_boqi/src/main/resources/log4j2.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <Console name="Console">
+            <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} %-5level} %c{1.} - %msg%n"/>
+        </Console>
+        <RollingFile name="RollingFile" fileName="logs/jastadd-mquat.log"
+                    filePattern="logs/jastadd-mquat-%i.log">
+            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
+            <Policies>
+                <OnStartupTriggeringPolicy/>
+            </Policies>
+            <DefaultRolloverStrategy max="20"/>
+        </RollingFile>
+    </Appenders>
+    <Loggers>
+        <Root level="debug">
+            <AppenderRef ref="Console"/>
+            <AppenderRef ref="RollingFile"/>
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/settings.gradle b/settings.gradle
index 4492d856ad2d58bf8a3fe0eedca93b30b9c05bb2..0a118ec458b406dfae388bf1218c2abd4bfd356b 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -3,6 +3,7 @@ rootProject.name = 'eraser'
 include ':eraser-base'
 include 'openhab-mock'
 include 'integration'
+include ':benchmark'
 include ':commons.color'
 include ':skywriter-hue-integration'
 include ':org.openhab.action.machinelearn'
@@ -19,4 +20,5 @@ include ':feedbackloop.learner'
 include ':influx_test'
 include ':eraser.spark'
 include ':eraser.starter'
-include ':integration_test'
+include ':feedbackloop.learner_backup'
+include ':datasets'
diff --git a/skywriter-hue-integration/src/main/resources/smart_arrive.eraser b/skywriter-hue-integration/src/main/resources/smart_arrive.eraser
new file mode 100644
index 0000000000000000000000000000000000000000..44b67cf94d3bb8da666cc38743f008552041a152
--- /dev/null
+++ b/skywriter-hue-integration/src/main/resources/smart_arrive.eraser
@@ -0,0 +1,44 @@
+ThingType: id="hue:bridge" label="Hue Bridge" description="The hue bridge represents the Philips hue bridge." parameters=[] channelTypes=[] ;
+ThingType: id="hue:0200" label="Color Light" description="A dimmable light with changeable colors." ;
+ThingType: id="hue:0210" label="Extended Color Light" description="A dimmable light with changeable colors and tunable color temperature." parameters=[] channelTypes=[];
+ThingType: id="skywriter-hat" label="SkyWriterHAT" description="SkyWriterHAT Gesture Recognition" parameters=["brokername"] channelTypes=["flick-type", "skywriter-x", "skywriter-y"] ;
+
+Thing: id="hue:bridge:0017880adcf4" label="Philips hue (10.8.0.160)" type="hue:bridge" channels=[] ;
+Thing: id="hue:0210:0017880adcf4:1" label="Wohnzimmer" type="hue:0210" channels=["hue:0210:0017880adcf4:1:color_temperature", "hue:0210:0017880adcf4:1:effect"] ;
+Thing: id="hue:0200:0017880adcf4:5" label="Hue iris 1" type="hue:0200" channels=["hue:0210:0017880adcf4:4:color", "hue:0210:0017880adcf4:4:color_temperature", "hue:0210:0017880adcf4:4:alert", "hue:0210:0017880adcf4:4:effect"] ;
+Thing: id="hue:0210:0017880adcf4:4" label="Hue go 1" type="hue:0210" channels=["hue:0200:0017880adcf4:5:color", "hue:0200:0017880adcf4:5:alert", "hue:0200:0017880adcf4:5:effect"] ;
+Thing: id="skywriter1" label="Our skywriter" type="skywriter-hat" channels=["skywriter1-flick", "skywriter1-x", "skywriter1-y"] ;
+
+ChannelType: id="hue:color" label="Color" description="The color channel allows to control the color of a light. It is also possible to dim values and switch the light on and off." itemType="Color" category="ColorLight" ;
+ChannelType: id="hue:alert" label="Alert" description="The alert channel allows a temporary change to the bulb’s state." itemType="String" category="Unknown" ;
+ChannelType: id="hue:effect" label="Color Loop" description="The effect channel allows putting the bulb in a color looping mode." itemType="Switch" category="ColorLight" ;
+ChannelType: id="hue:color_temperature" label="Color Temperature" description="The color temperature channel allows to set the color temperature of a light from 0 (cold) to 100 (warm)." itemType="Dimmer" category="ColorLight" ;
+ChannelType: id="flick-type" itemType="String" label="Last Flick" description="Last Flick detected (and its direction)" category="Motion" readOnly ;
+ChannelType: id="skywriter-x" itemType="String" label="Current X coordinate" description="Current X coordinate" category="Motion" readOnly ;
+ChannelType: id="skywriter-y" itemType="String" label="Current Y coordinate" description="Current Y coordinate" category="Motion" readOnly ;
+
+Channel: id="hue:0210:0017880adcf4:1:color_temperature" type="hue:color_temperature" links=[] ;
+Channel: id="hue:0210:0017880adcf4:1:effect" type="hue:effect" links=[] ;
+Channel: id="hue:0210:0017880adcf4:4:color" type="hue:color" links=[] ;
+Channel: id="hue:0210:0017880adcf4:4:color_temperature" type="hue:color_temperature" links=[] ;
+Channel: id="hue:0210:0017880adcf4:4:alert" type="hue:alert" links=[] ;
+Channel: id="hue:0210:0017880adcf4:4:effect" type="hue:effect" links=[] ;
+Channel: id="hue:0200:0017880adcf4:5:color" type="hue:color" links=["iris1_item"] ;
+Channel: id="hue:0200:0017880adcf4:5:alert" type="hue:alert" links=[] ;
+Channel: id="hue:0200:0017880adcf4:5:effect" type="hue:color" links=[] ;
+Channel: id="skywriter1-flick" type="flick-type" links=[];
+Channel: id="skywriter1-x" type="skywriter-x" links=["skywriter1_x"];
+Channel: id="skywriter1-y" type="skywriter-y" links=["skywriter1_y"];
+
+Item: id="iris1_item" label="Iris 1" state="121,88,68" topic="iris1_item/state";
+Item: id="skywriter1_x" label="X" state="0" topic="skywriter/x";
+Item: id="skywriter1_y" label="Y" state="0" topic="skywriter/y";
+//Item: id="skywriter1_xyz" label="Y" state="0" topic="skywriter/xyz";
+
+Group: id="Lights" items=["iris1_item"];
+Group: id="Skywriter" items=["skywriter1_x", "skywriter1_y"];
+
+Parameter: id="brokername" label="Broker Name" description="Name of the broker as defined in the &lt;broker&gt;.url in services/mqtt.cfg. See the MQTT Binding for more information on how to configure MQTT broker connections." type="Text" context="service" default="mosquitto" required ;
+
+// MqttHost is set programmatically
+Mqtt: incoming="oh2/out/" outgoing="oh2/in/" ;