diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningDecoder.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningDecoder.java
index 9d5decee1c21371af37de13909ff2278a8a28782..17cdf780f358c7e5543c80a4e53763d17f4abc20 100644
--- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningDecoder.java
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningDecoder.java
@@ -1,4 +1,21 @@
 package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
 
-public class MachineLearningDecoder {
+import de.tudresden.inf.st.eraser.jastadd.model.MachineLearningResult;
+
+import java.time.Instant;
+
+public interface MachineLearningDecoder {
+    /**
+     * Execute the machine learning model and returns the classification result.
+     * @return the result of the classification
+     */
+    MachineLearningResult classify();
+
+    // less important
+
+    /**
+     * Returns the time when the model was last updated, i.e., when the last training was completed.
+     * @return the time when the model was last updated, or <code>null</code> if the model was not trained yet
+     */
+    Instant lastModelUpdate();
 }
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningEncoder.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningEncoder.java
index abbfe7299d758e73d6a594f3164b52ef91edfe03..219a9631ad1d1310c4957eb1ce028a7b8dfd4444 100644
--- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningEncoder.java
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningEncoder.java
@@ -1,4 +1,38 @@
 package de.tudresden.inf.st.eraser.feedbackloop.learner_backup;
 
+import de.tudresden.inf.st.eraser.jastadd.model.Item;
+import de.tudresden.inf.st.eraser.jastadd.model.Root;
+
+import java.util.List;
+
 public interface MachineLearningEncoder {
+    /**
+     * 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);
+
+    // to be discussed, in which form this is specified
+
+    /**
+     * Get the items that this model is supposed to change.
+     * @return the list of targeted items
+     */
+    List<Item> getTargets(Root model);
+
+    // to be discussed, in which form this is specified
+
+    /**
+     * Get the items which are relevant for the decision making of this model.
+     * @return the list of items relevant for decision making
+     */
+    List<Item> getRelevantItems(Root model);
+
+    // to be discussed, if this is necessary
+
+    /**
+     * Explicit hint for this model to start/trigger training. The model might ignore this hint.
+     */
+    void triggerTraining();
 }
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningEncoderImpl.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningEncoderImpl.java
index 8f4f940bd17eeaf112e47a5a226d8bb6fac1af05..86604d95b4551d480bb76caa06e8c74708573bea 100644
--- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningEncoderImpl.java
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningEncoderImpl.java
@@ -4,20 +4,32 @@ import de.tudresden.inf.st.eraser.jastadd.model.*;
 import java.time.Instant;
 import java.util.List;
 
-public class MachineLearningEncoderImpl implements MachineLearningEncoder, MachineLearningDecoder {
+public class MachineLearningEncoderImpl implements MachineLearningDecoder,MachineLearningEncoder {
+
+    private String[] new_data = new String[13];
+    private List<Item> target_item_list;
+    private List<Item> relevant_item_list;
+    private String[] result;
 
-    String[] new_data = new String[13];
-    List<Item> target_item_list;
-    List<Item> relevant_item_list;
     @Override
     public void newData(Root model, List<Item> changedItems) {
-        String topic = changedItems.get(0).getTopic().toString();
+        /**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();
+        iris_item.getStateAsString();*/
+        int i=0;
+        for (Item item: changedItems){
+            if(i<13) {
+                new_data[i] = item.getStateAsString();
+                i++;
+            }
+        }
+        Learner learner= new Learner();
+        result = learner.predictor(new_data);
+
     }
 
     @Override
@@ -61,8 +73,6 @@ public class MachineLearningEncoderImpl implements MachineLearningEncoder, Machi
         relevant_item_list.add(w_rotation_y);
         relevant_item_list.add(w_rotation_z);
         relevant_item_list.add(w_brightness);
-
-
         return null;
 
     }
@@ -79,6 +89,8 @@ public class MachineLearningEncoderImpl implements MachineLearningEncoder, Machi
 
     @Override
     public MachineLearningResult classify() {
+        String activity=result[0];
+        String[] preference= {result[1],result[2]};
         return null;
     }
 }