diff --git a/eraser.starter/src/main/test.iml b/eraser.starter/src/main/test.iml
deleted file mode 100644
index c90834f2d607afe55e6104d8aa2cdfffb713f688..0000000000000000000000000000000000000000
--- a/eraser.starter/src/main/test.iml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/eraser.starter/src/test/java/de/tudresden/inf/st/eraser/starter/EraserStarterTest.java b/eraser.starter/src/test/java/de/tudresden/inf/st/eraser/starter/EraserStarterTest.java
deleted file mode 100644
index 5ba76bb5ddd0c36dddbdd7dd1e37eb8bcc03d1cc..0000000000000000000000000000000000000000
--- a/eraser.starter/src/test/java/de/tudresden/inf/st/eraser/starter/EraserStarterTest.java
+++ /dev/null
@@ -1,187 +0,0 @@
-package de.tudresden.inf.st.eraser.starter;
-
-import beaver.Parser;
-import com.fasterxml.jackson.databind.ObjectMapper;
-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.model.Model;
-import de.tudresden.inf.st.eraser.feedbackloop.execute.ExecuteImpl;
-import de.tudresden.inf.st.eraser.feedbackloop.learner.LearnerImpl;
-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.spark.Application;
-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 java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * This Starter combines and starts all modules. This includes:
- *
- * <ul>
- *   <li>Knowledge-Base in <code>eraser-base</code></li>
- *   <li>Feedback loop in <code>feedbackloop.{analyze,plan,execute}</code></li>
- *   <li>REST-API in <code>eraser-rest</code></li>
- * </ul>
- */
-public class EraserStarter {
-
-  private static final Logger logger = LogManager.getLogger(EraserStarter.class);
-
-  @SuppressWarnings("ResultOfMethodCallIgnored")
-  public static void main(String[] args) {
-    logger.info("Starting ERASER");
-    ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
-    File settingsFile = new File("starter-setting.yaml");
-    Setting settings;
-    try {
-      settings = mapper.readValue(settingsFile, Setting.class);
-    } catch (Exception e) {
-      logger.fatal("Could not read settings at '{}'. Exiting.", settingsFile.getAbsolutePath());
-      logger.catching(e);
-      System.exit(1);
-      return;
-    }
-    boolean startRest = settings.rest.use;
-
-    Root model;
-    switch (settings.initModelWith) {
-      case openhab:
-        OpenHab2Importer importer = new OpenHab2Importer();
-        try {
-          model = importer.importFrom(new URL(settings.openhab.url));
-        } catch (MalformedURLException e) {
-          logger.error("Could not parse URL {}", settings.openhab.url);
-          logger.catching(e);
-          System.exit(1);
-          return;
-        }
-        logger.info("Imported model {}", model.description());
-        break;
-      case load:
-      default:
-        try {
-          model = ParserUtils.load(settings.load.file, EraserStarter.class);
-        } catch (IOException | Parser.Exception e) {
-          logger.error("Problems parsing the given file {}", settings.load.file);
-          logger.catching(e);
-          System.exit(1);
-          return;
-        }
-    }
-
-    // initialize activity recognition
-    if (settings.activity.dummy) {
-      logger.info("Using dummy activity recognition");
-      model.getMachineLearningRoot().setActivityRecognition(DummyMachineLearningModel.createDefault());
-    } else {
-      logger.error("Reading activity recognition from file is not supported yet!");
-      // TODO
-    }
-
-    // initialize preference learning
-    if (settings.preference.dummy) {
-      logger.info("Using dummy preference learning");
-      model.getMachineLearningRoot().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
-      Model preference = learner.getTrainedModel(settings.preference.realURL(), settings.preference.id);
-      NeuralNetworkRoot neuralNetwork = LearnerHelper.transform(preference);
-      if (neuralNetwork == null) {
-        logger.error("Could not create preference model, see possible previous errors.");
-      } else {
-        model.getMachineLearningRoot().setPreferenceLearning(neuralNetwork);
-        neuralNetwork.connectItems(settings.preference.items);
-        neuralNetwork.setOutputApplication(zeroToThree -> 25 * zeroToThree);
-        JavaUtils.ifPresentOrElse(
-            model.resolveItem(settings.preference.affectedItem),
-            item -> neuralNetwork.getOutputLayer().setAffectedItem(item),
-            () -> logger.error("Output item not set from value '{}'", settings.preference.affectedItem));
-      }
-    }
-    if (!model.getMachineLearningRoot().getActivityRecognition().check()) {
-      logger.fatal("Invalid activity recognition!");
-      System.exit(1);
-    }
-    if (!model.getMachineLearningRoot().getPreferenceLearning().check()) {
-      logger.fatal("Invalid preference learning!");
-      System.exit(1);
-    }
-
-    Analyze analyze = null;
-    if (settings.useMAPE) {
-      // configure and start mape loop
-      logger.info("Starting MAPE loop");
-      analyze = new AnalyzeImpl();
-      Plan plan = new PlanImpl();
-      Execute execute = new ExecuteImpl();
-
-      analyze.setPlan(plan);
-      plan.setExecute(execute);
-
-      analyze.setKnowledgeBase(model);
-      plan.setKnowledgeBase(model);
-      execute.setKnowledgeBase(model);
-
-      analyze.startAsThread(1, TimeUnit.SECONDS);
-      if (!startRest) {
-        // alternative exit condition
-        System.out.println("Hit [Enter] to exit");
-        try {
-          System.in.read();
-        } catch (IOException e) {
-          e.printStackTrace();
-        }
-
-        System.out.println("Stopping...");
-        analyze.stop();
-      }
-    } else {
-      logger.info("No MAPE loop this time");
-    }
-
-    if (startRest) {
-      // start REST-API in new thread
-      logger.info("Starting REST server");
-      Lock lock = new ReentrantLock();
-      Condition quitCondition = lock.newCondition();
-      Thread t = new Thread(new ThreadGroup("REST-API"),
-          () -> Application.start(settings.rest.port, model, settings.rest.createDummyMLData, lock, quitCondition));
-      t.setDaemon(true);
-      t.start();
-      logger.info("Waiting until request is send to '/system/exit'");
-      try {
-        lock.lock();
-        if (t.isAlive()) {
-          quitCondition.await();
-        }
-      } catch (InterruptedException e) {
-        logger.warn("Waiting was interrupted");
-      } finally {
-        lock.unlock();
-      }
-      if (analyze != null) {
-        analyze.stop();
-      }
-    } else {
-      logger.info("No REST server this time");
-    }
-    logger.info("I'm done here.");
-  }
-}
diff --git a/eraser.starter/src/test/java/de/tudresden/inf/st/eraser/starter/LearnerHelperTest.java b/eraser.starter/src/test/java/de/tudresden/inf/st/eraser/starter/LearnerHelperTest.java
deleted file mode 100644
index 34404713f0e3abc32cf87ebca43db783c9dc3288..0000000000000000000000000000000000000000
--- a/eraser.starter/src/test/java/de/tudresden/inf/st/eraser/starter/LearnerHelperTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package de.tudresden.inf.st.eraser.starter;
-
-import de.tudresden.inf.st.eraser.feedbackloop.api.model.Model;
-import de.tudresden.inf.st.eraser.jastadd.model.*;
-import org.apache.commons.math3.stat.StatUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * Transformation of a {@link Model} into a {@link MachineLearningModel}.
- *
- * @author rschoene - Initial contribution
- */
-class LearnerHelper {
-
-  private static final Logger logger = LogManager.getLogger(LearnerHelper.class);
-
-  // Activation Functions
-  private static DoubleArrayDoubleFunction sigmoid = inputs -> Math.signum(Arrays.stream(inputs).sum());
-  private static DoubleArrayDoubleFunction tanh = inputs -> Math.tanh(Arrays.stream(inputs).sum());
-  private static DoubleArrayDoubleFunction function_one = inputs -> 1.0;
-
-  static NeuralNetworkRoot transform(Model model) {
-    NeuralNetworkRoot result = NeuralNetworkRoot.createEmpty();
-    ArrayList<Double> weights = model.getWeights();
-
-    // inputs
-    int inputSum = model.getInputLayerNumber() + model.getInputBias();
-    for (int i = 0; i < inputSum; ++i) {
-      InputNeuron inputNeuron = new InputNeuron();
-      result.addInputNeuron(inputNeuron);
-    }
-    InputNeuron bias = result.getInputNeuron(model.getInputBias());
-
-    OutputLayer outputLayer = new OutputLayer();
-    // output layer
-    for (int i = 0; i < model.getOutputLayerNumber(); ++i) {
-      OutputNeuron outputNeuron = new OutputNeuron();
-      setActivationFunction(outputNeuron, model.getOutputActivationFunction());
-      outputLayer.addOutputNeuron(outputNeuron);
-    }
-    result.setOutputLayer(outputLayer);
-
-    // hidden layer
-    int hiddenSum = model.gethiddenLayerNumber() + model.getHiddenBias();
-    HiddenNeuron[] hiddenNeurons = new HiddenNeuron[hiddenSum];
-    for (int i = 0; i < (hiddenNeurons.length); i++) {
-      if (i == model.gethiddenLayerNumber()) {
-        HiddenNeuron hiddenNeuron = new HiddenNeuron();
-        hiddenNeuron.setActivationFormula(function_one);
-        hiddenNeurons[i] = hiddenNeuron;
-        result.addHiddenNeuron(hiddenNeuron);
-        bias.connectTo(hiddenNeuron, 1.0);
-        for (int out = 0; out < outputLayer.getNumOutputNeuron(); out++) {
-          hiddenNeuron.connectTo(outputLayer.getOutputNeuron(out), weights.get(i + hiddenSum * out));
-        }
-      } else {
-        HiddenNeuron hiddenNeuron = new HiddenNeuron();
-        setActivationFunction(hiddenNeuron, model.getHiddenActivationFunction());
-        hiddenNeurons[i] = hiddenNeuron;
-        result.addHiddenNeuron(hiddenNeuron);
-        for (int in = 0; in < inputSum; in++) {
-          // TODO replace 4 and 5 with model-attributes
-          result.getInputNeuron(in).connectTo(hiddenNeuron, weights.get((hiddenNeurons.length * 4 + in) + i * 5));
-        }
-        for (int out = 0; out < outputLayer.getNumOutputNeuron(); out++) {
-          hiddenNeuron.connectTo(outputLayer.getOutputNeuron(out), weights.get(i + hiddenSum * out));
-        }
-      }
-    }
-    outputLayer.setCombinator(LearnerHelper::predictor);
-    logger.info("Created model with {} input, {} hidden and {} output neurons",
-        result.getNumInputNeuron(), result.getNumHiddenNeuron(), result.getOutputLayer().getNumOutputNeuron());
-    return result;
-  }
-
-  private static void setActivationFunction(HiddenNeuron neuron, String functionName) {
-    switch (functionName) {
-      case "ActivationTANH": neuron.setActivationFormula(tanh); break;
-      case "ActivationLinear": neuron.setActivationFormula(function_one);
-      case "ActivationSigmoid": neuron.setActivationFormula(sigmoid); break;
-      default: throw new IllegalArgumentException("Unknown function " + functionName);
-    }
-  }
-
-  private static double predictor(double[] inputs) {
-    int index = 0;
-    double maxInput = StatUtils.max(inputs);
-    for (int i = 0; i < inputs.length; i++) {
-      if (inputs[i] == maxInput) {
-        index = i;
-      }
-    }
-    //outputs from learner
-    final double[] outputs = new double[]{2.0, 1.0, 3.0, 0.0};
-    return outputs[index];
-  }
-
-}
diff --git a/eraser.starter/src/test/java/de/tudresden/inf/st/eraser/starter/SettingTest.java b/eraser.starter/src/test/java/de/tudresden/inf/st/eraser/starter/SettingTest.java
deleted file mode 100644
index aa11fd9b7b1caf0b749e47996c1cf1885b8525d1..0000000000000000000000000000000000000000
--- a/eraser.starter/src/test/java/de/tudresden/inf/st/eraser/starter/SettingTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package de.tudresden.inf.st.eraser.starter;
-
-import java.net.URL;
-import java.util.List;
-
-/**
- * Setting bean.
- *
- * @author rschoene - Initial contribution
- */
-@SuppressWarnings("WeakerAccess")
-class Setting {
-  public class Rest {
-    public boolean use = true;
-    public int port = 4567;
-    public boolean createDummyMLData = false;
-  }
-  public class FileContainer {
-    public String file;
-    URL realURL() {
-      return Setting.class.getClassLoader().getResource(file);
-    }
-  }
-  public class MLContainer extends FileContainer {
-    public boolean dummy = false;
-    public int id = 1;
-    public List<String> items;
-    public String affectedItem;
-  }
-  public class OpenHabContainer {
-    public String url;
-  }
-  public enum InitModelWith {
-    load, openhab
-  }
-  public Rest rest;
-  public boolean useMAPE = true;
-  public FileContainer load;
-  public MLContainer activity;
-  public MLContainer preference;
-  public OpenHabContainer openhab;
-  public InitModelWith initModelWith = InitModelWith.load;
-}