diff --git a/agui2/src/MainWindow.cpp b/agui2/src/MainWindow.cpp
index cbaa1c446015f93bfbc4a25e8360049c30cad007..53c956c88a4bd6bea63043a1a48e9e84859c728d 100644
--- a/agui2/src/MainWindow.cpp
+++ b/agui2/src/MainWindow.cpp
@@ -57,7 +57,12 @@ void MainWindow::on_RunBtn_clicked()
 {
     std::shared_ptr<abstraction::OperationAbstraction> result;
     try {
+#if 0
+        this->outputBox->getModelBox()->clearResultRecursive();
+        result = this->outputBox->getModelBox()->run();
+#else
         result = ParallelExecutor::getInstance()->execute(dynamic_cast<OutputModelBox*>(this->outputBox->getModelBox()));
+#endif
     }
     catch (const exception::CommonException& e) {
         this->displayError(QString::fromStdString(e.getCause()));
diff --git a/agui2/src/Models/AlgorithmModelBox.cpp b/agui2/src/Models/AlgorithmModelBox.cpp
index 2b7ff128cea4395b01f73237a78052f6a7bad157..261ad6a481a1467a66867002ea13237f8b1e5a90 100644
--- a/agui2/src/Models/AlgorithmModelBox.cpp
+++ b/agui2/src/Models/AlgorithmModelBox.cpp
@@ -10,18 +10,17 @@ AlgorithmModelBox::AlgorithmModelBox(Algorithm* algorithm)
     : ModelBox(ModelType::Algorithm, algorithm->getInputCount())
     , algorithm(algorithm) {}
 
-std::shared_ptr<abstraction::OperationAbstraction> AlgorithmModelBox::run() {
+std::shared_ptr<abstraction::OperationAbstraction> AlgorithmModelBox::runInternal() {
     std::vector<std::shared_ptr<abstraction::OperationAbstraction>> params;
-    for (const auto* input: this->inputs)
+    for (auto* input: this->inputs)
     {
         if (!input)
             return nullptr;
-        params.push_back(input->getResult());
+        params.push_back(input->run());
         if (!params.back())
             return nullptr;
     }
-    this->result = this->algorithm->execute(params);
-    return this->result;
+    return this->algorithm->execute(params);
 }
 
 std::string AlgorithmModelBox::getName() const {
diff --git a/agui2/src/Models/AlgorithmModelBox.hpp b/agui2/src/Models/AlgorithmModelBox.hpp
index b5f5ba172d7948606a10df480a20d1523f4a63cb..6aa0293628917c25af5eb40f35a07fc6af0c330d 100644
--- a/agui2/src/Models/AlgorithmModelBox.hpp
+++ b/agui2/src/Models/AlgorithmModelBox.hpp
@@ -9,7 +9,8 @@ public:
     std::string getName() const override;
     Algorithm* getAlgorithm() const { return this->algorithm; }
 
-    std::shared_ptr<abstraction::OperationAbstraction> run() override;
+protected:
+    std::shared_ptr<abstraction::OperationAbstraction> runInternal() override;
 
 private:
     Algorithm* algorithm;
diff --git a/agui2/src/Models/InputModelBox.cpp b/agui2/src/Models/InputModelBox.cpp
index 68886f469f85eaee3df635e362a7d9c9bb66a886..0456e740c80680b0dd60e5a823b68b39274049ed 100644
--- a/agui2/src/Models/InputModelBox.cpp
+++ b/agui2/src/Models/InputModelBox.cpp
@@ -4,7 +4,7 @@ InputModelBox::InputModelBox()
     : ModelBox(ModelType::Input, 0)
 {}
 
-std::shared_ptr<abstraction::OperationAbstraction> InputModelBox::run() {
+std::shared_ptr<abstraction::OperationAbstraction> InputModelBox::runInternal() {
     return this->result;
 }
 
diff --git a/agui2/src/Models/InputModelBox.hpp b/agui2/src/Models/InputModelBox.hpp
index 0f64c44bb11f18efb315be198f5934864ae81ad2..8e4a01105fde3260d5c01b0dc0db50a30632b53b 100644
--- a/agui2/src/Models/InputModelBox.hpp
+++ b/agui2/src/Models/InputModelBox.hpp
@@ -6,7 +6,9 @@ class InputModelBox : public ModelBox {
 public:
     explicit InputModelBox();
 
-    std::shared_ptr<abstraction::OperationAbstraction> run() override;
+    void clearResultRecursive() override {}
+
+    std::shared_ptr<abstraction::OperationAbstraction> runInternal() override;
 
     std::string getName() const override;
 
diff --git a/agui2/src/Models/ModelBox.cpp b/agui2/src/Models/ModelBox.cpp
index d4df67e28e5bb68f449dc6bc42bf5479295dd887..89ef621d549504b9d2c454a23e6c3f3e9f43a735 100644
--- a/agui2/src/Models/ModelBox.cpp
+++ b/agui2/src/Models/ModelBox.cpp
@@ -34,3 +34,18 @@ void ModelBox::removeOutput(ModelBox* model, uint8_t slot) {
     Q_ASSERT(this->canHaveOutput());
     this->outputs.erase({model, slot});
 }
+
+std::shared_ptr<abstraction::OperationAbstraction> ModelBox::run() {
+    if (!this->result)
+        this->result = this->runInternal();
+
+    return this->result;
+}
+
+void ModelBox::clearResultRecursive() {
+    this->result.reset();
+    for (auto* input: this->inputs) {
+        input->clearResultRecursive();
+    }
+
+}
diff --git a/agui2/src/Models/ModelBox.hpp b/agui2/src/Models/ModelBox.hpp
index 5227ff4fc3ad137adbde7e80f6d2ee043398a91c..747c27d97072096df4117ee50b543ba5584c014e 100644
--- a/agui2/src/Models/ModelBox.hpp
+++ b/agui2/src/Models/ModelBox.hpp
@@ -34,9 +34,13 @@ public:
     virtual bool canHaveOutput() const { return true; }
 
     std::shared_ptr<abstraction::OperationAbstraction> getResult() const { return this->result; }
+    virtual void clearResultRecursive();
+
+    std::shared_ptr<abstraction::OperationAbstraction> run();
 
-    virtual std::shared_ptr<abstraction::OperationAbstraction> run() = 0;
 protected:
+    virtual std::shared_ptr<abstraction::OperationAbstraction> runInternal() = 0;
+
     ModelType type;
 
     uint8_t maxInputCount = 0;
diff --git a/agui2/src/Models/OutputModelBox.cpp b/agui2/src/Models/OutputModelBox.cpp
index c33a92d08287900c05874a4720edc12f6289cc9e..b7a54af9f471ae0a608f7d264d6c86f800444813 100644
--- a/agui2/src/Models/OutputModelBox.cpp
+++ b/agui2/src/Models/OutputModelBox.cpp
@@ -6,12 +6,11 @@ OutputModelBox::OutputModelBox()
     : ModelBox(ModelType::Output, 1)
 {}
 
-std::shared_ptr<abstraction::OperationAbstraction> OutputModelBox::run() {
+std::shared_ptr<abstraction::OperationAbstraction> OutputModelBox::runInternal() {
     assert(this->inputs.size() == 1);
     if (!this->inputs[0])
         return nullptr;
-    this->result = inputs[0]->getResult();
-    return this->result;
+    return inputs[0]->run();
 }
 
 std::string OutputModelBox::getName() const {
diff --git a/agui2/src/Models/OutputModelBox.hpp b/agui2/src/Models/OutputModelBox.hpp
index ef4d513766d66df2f10c13f4a8d0a1a23011e046..3bfb8545b20d6c33077e163cdfcd835a6d8a77e1 100644
--- a/agui2/src/Models/OutputModelBox.hpp
+++ b/agui2/src/Models/OutputModelBox.hpp
@@ -9,7 +9,7 @@ public:
 
     bool canHaveOutput() const override { return false; }
 
-    std::shared_ptr<abstraction::OperationAbstraction> run() override;
+    std::shared_ptr<abstraction::OperationAbstraction> runInternal() override;
 };