diff --git a/include/aidge/nodeTester/ConditionalInterpreter.hpp b/include/aidge/nodeTester/ConditionalInterpreter.hpp
index e5f971a81b6964c137ae489b46b921953975946d..9840f637fe7452ddd21c5289455162e1993c505e 100644
--- a/include/aidge/nodeTester/ConditionalInterpreter.hpp
+++ b/include/aidge/nodeTester/ConditionalInterpreter.hpp
@@ -228,6 +228,17 @@ class ConditionalInterpreter
      * @see ConditionalRegisterFunction
     */
     ConditionalRegisterFunction mLambdaRegiter;
+
+
+    std::vector<ConditionalData*> mResolution ;
+
+    void clearRes(){
+
+        for (std::size_t i = 0; i < mResolution.size(); ++i) {
+            delete mResolution[i];
+        } 
+        mResolution.clear();
+    }
     
     public:
     /**
@@ -236,6 +247,8 @@ class ConditionalInterpreter
      */
 
     ConditionalInterpreter(const std::string ConditionalExpressions);
+
+    ~ConditionalInterpreter(){clearRes();}
     
     /**
      * @brief Test a node depending of the ConditionalExpressions
@@ -275,49 +288,49 @@ class ConditionalInterpreter
      * @ingroup ASTnodeInterpreterF
      * @brief Function that does something.
      */
-    std::vector<ConditionalData*> fLambda(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node,std::vector<ConditionalData*> datas);
+    void fLambda(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node);
     /**
      * @ingroup ASTnodeInterpreterF
      * @brief Converted the lexeme to a int and to ConditionalData*
      */
-    std::vector<ConditionalData*> fStrToInteger(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node);
+    void fStrToInteger(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node);
     /**
      * @ingroup ASTnodeInterpreterF
      * @brief Converted the lexeme to a float and to ConditionalData*
      */
-    std::vector<ConditionalData*> fStrToFloat(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node);
+    void fStrToFloat(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node);
     /**
      * @ingroup ASTnodeInterpreterF
      * @brief Converted the lexeme to a str and to ConditionalData*
      */
-    std::vector<ConditionalData*> fStrToStr(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node);
+    void fStrToStr(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node);
 
     /**
      * @ingroup ASTnodeInterpreterF
      * @brief makes the == operation between two previously converted ConditionalData* 
      */
-    std::vector<ConditionalData*> fEq(std::vector<ConditionalData*> datas);
+    void fEq(void);
        /**
      * @ingroup ASTnodeInterpreterF
      * @brief makes the != operation between two previously converted ConditionalData* 
      */
-    std::vector<ConditionalData*> fNeq(std::vector<ConditionalData*> datas);
+    void fNeq(void);
     /**
      * @ingroup ASTnodeInterpreterF
      * @brief makes the && operation between two previously converted ConditionalData* in bool 
      */
-    std::vector<ConditionalData*> fAnd(std::vector<ConditionalData*> datas);
+    void fAnd(void);
         /**
      * @ingroup ASTnodeInterpreterF
      * @brief makes the || operation between two previously converted ConditionalData* in bool 
      */
-    std::vector<ConditionalData*> fOr(std::vector<ConditionalData*> datas);
+    void fOr(void);
 
     /**
      * @ingroup ASTnodeInterpreterF
      * @brief makes the ! operation 
      */
-    std::vector<ConditionalData*> fNot(std::vector<ConditionalData*> datas);
+    void fNot(void);
 };
 
 
diff --git a/src/nodeTester/ConditionalInterpreter.cpp b/src/nodeTester/ConditionalInterpreter.cpp
index 48947035eb0648effe39ff5c9ac394ead8cc7650..8cb20ac2f2348821b245dfc9f61be1072d76b9c9 100644
--- a/src/nodeTester/ConditionalInterpreter.cpp
+++ b/src/nodeTester/ConditionalInterpreter.cpp
@@ -35,16 +35,18 @@ using namespace Aidge;
 
     bool ConditionalInterpreter::test( const NodePtr nodeOp)
     {
+
+        clearRes();
         try{
             std::vector<ConditionalData*> r =  visit({mTree},nodeOp);
    
-        if (r.size() != 1){
+        if (mResolution.size() != 1){
             throw std::runtime_error("Multy output interpretation output");
         }else{
-            if (!r[0]->isTypeEqualTo<bool>()){
+            if (!mResolution[0]->isTypeEqualTo<bool>()){
                 throw std::runtime_error("TEST OUT MUST BE A BOOL ");
             }else{
-                return r[0]->getValue<bool>();
+                return mResolution[0]->getValue<bool>();
             }
         }
 
@@ -53,7 +55,6 @@ using namespace Aidge;
             errorMessage << "Error in test " << "\n\t" << e.what()  << "\n";
             throw std::runtime_error(errorMessage.str()); 
         }
-
     }
 
     void ConditionalInterpreter::insertLambda(const std::string key,std::function<bool(Aidge::NodePtr)> f){
@@ -72,32 +73,33 @@ using namespace Aidge;
                         /////////////////////////////////// 
                         case ConditionalTokenTypes::NOT:
                             {
-                            std::vector<ConditionalData*> tmp = fNot(visit(node->getChilds(),nodeOp));
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                            visit(node->getChilds(),nodeOp);
+                            fNot();
                             }
                             break;
                         case ConditionalTokenTypes::AND:
                             {
-                            std::vector<ConditionalData*> tmp = fAnd(visit(node->getChilds(),nodeOp));
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                            visit(node->getChilds(),nodeOp);
+                            fAnd();
                             }
                             break;
                         case ConditionalTokenTypes::OR:
                             {
-                            std::vector<ConditionalData*> tmp = fOr(visit(node->getChilds(),nodeOp));
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                            visit(node->getChilds(),nodeOp);
+                            fOr();
                             }
                             break;
                         case ConditionalTokenTypes::EQ:
                             {
-                            std::vector<ConditionalData*> tmp = fEq(visit(node->getChilds(),nodeOp));
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                            visit(node->getChilds(),nodeOp);
+                            fEq();
+                            //dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
                             }
                             break;
                         case ConditionalTokenTypes::NEQ:
                             {
-                            std::vector<ConditionalData*> tmp = fNeq(visit(node->getChilds(),nodeOp));
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                            visit(node->getChilds(),nodeOp);
+                            fNeq();
                             }
                             break;
 
@@ -110,38 +112,36 @@ using namespace Aidge;
                             break;
                         case ConditionalTokenTypes::INTEGER:
                             {
-                            std::vector<ConditionalData*> tmp = fStrToInteger(node);
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                                fStrToInteger(node);
                             }
                             break;
                         case ConditionalTokenTypes::FLOAT:
                             {
-                            std::vector<ConditionalData*> tmp = fStrToFloat(node);
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                                fStrToFloat(node);
+                            
                             }
                             break;
                         case ConditionalTokenTypes::STRING:
                             {
-                            std::vector<ConditionalData*> tmp = fStrToStr(node);
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                                fStrToStr(node);
                             }
                             break;
                     
                         case ConditionalTokenTypes::NODE: //TODO
                             {
 
-                            ConditionalData* data = new ConditionalData;
-                            data->setValue<NodePtr>(nodeOp);
-                            std::vector<ConditionalData*> tmp = {data};
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                                ConditionalData* data = new ConditionalData;
+                                data->setValue<NodePtr>(nodeOp);
+                                mResolution.push_back(data);
 
                             }
                             break;
 
                         case ConditionalTokenTypes::LAMBDA:
                             {
-                            std::vector<ConditionalData*> tmp = fLambda(node,visit(node->getChilds(),nodeOp));
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+                                visit(node->getChilds(),nodeOp);
+                                fLambda(node);
+                    
                             }
                             break;
 
@@ -154,9 +154,9 @@ using namespace Aidge;
                             }else{
                                 data->setValue<bool>(false);
                             }
-                            
-                            std::vector<ConditionalData*> tmp = {data};
-                            dataVector.insert(dataVector.end(), tmp.begin(), tmp.end());
+
+                            mResolution.push_back(data);
+
                             }
                             break;
 
@@ -183,68 +183,57 @@ using namespace Aidge;
     /////////////////////
 
 
-    std::vector<ConditionalData*> ConditionalInterpreter::fStrToInteger(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node)
+    void ConditionalInterpreter::fStrToInteger(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node)
     {
-        std::vector<ConditionalData*> dataVector;
         ConditionalData* data = new ConditionalData;
         data->setValue<int>(std::stoi(node->getValue()));
-        dataVector.push_back(data);
-        return dataVector;
+        mResolution.push_back(data);
     }
 
-    std::vector<ConditionalData*> ConditionalInterpreter::fStrToFloat(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node)
+    void ConditionalInterpreter::fStrToFloat(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node)
     {
-        std::vector<ConditionalData*> dataVector;
+       
         ConditionalData* data = new ConditionalData;
         data->setValue<float>(std::stof(node->getValue()));
-        dataVector.push_back(data);
-        return dataVector;
+        mResolution.push_back(data);
     }
 
-    std::vector<ConditionalData*> ConditionalInterpreter::fStrToStr(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node)
+    void ConditionalInterpreter::fStrToStr(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node)
     {
-        std::vector<ConditionalData*> dataVector;
         ConditionalData* data = new ConditionalData;
         data->setValue<std::string>(node->getValue());
-        dataVector.push_back(data);
-        return dataVector;
+        mResolution.push_back(data);
     }
 
-    std::vector<ConditionalData*> ConditionalInterpreter::fLambda(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node,std::vector<ConditionalData*> datas) 
+    void ConditionalInterpreter::fLambda(const std::shared_ptr<AstNode<ConditionalTokenTypes>>& node) 
     {
         //if the lambda have input
-        std::vector<ConditionalData*> dataVector;
         ConditionalData* data;
         try {
-            data = mLambdaRegiter.run(node->getValue(),datas);
+            data = mLambdaRegiter.run(node->getValue(),mResolution);
         } catch (const std::exception& e) {
             std::ostringstream errorMessage;
             errorMessage << "Error in conditional interpretation when run the "<<  node->getValue() <<" Lambda\n\t" << e.what()  << "\n";
             throw std::runtime_error(errorMessage.str()); 
         }
-        dataVector.push_back(data);
-        
-        //clear
-        for (std::size_t i = 0; i < datas.size(); ++i) {
-            delete datas[i];
-        } 
-        datas.clear();
-        return dataVector;
+
+        clearRes();
+        mResolution.push_back(data);
     }
 
-    std::vector<ConditionalData*> ConditionalInterpreter::fEq(std::vector<ConditionalData*> datas)
+    void ConditionalInterpreter::fEq(void)
     {
-        if (datas.size() != 2){
-            throw std::runtime_error("EQ need 2 arg and get :" + datas.size());
+        if (mResolution.size() != 2){
+            throw std::runtime_error("EQ need 2 arg and get :" + mResolution.size());
         }
-        auto a = datas[0];
-        auto b = datas[1];
+        auto a = mResolution[0];
+        auto b = mResolution[1];
 
         if (a->getType() != b->getType()){
             throw std::runtime_error("EQ Unsuported between type :" + a->getType() +" "+ b->getType());
         }
 
-        std::vector<ConditionalData*> dataVector;
+
 
         ConditionalData* data = new ConditionalData;
 
@@ -259,29 +248,23 @@ using namespace Aidge;
         }else{
            throw std::runtime_error("EQ Unknown type encountered :" + a->getType() );
         }
-        dataVector.push_back(data);
-         //clear
-        for (std::size_t i = 0; i < datas.size(); ++i) {
-            delete datas[i];
-        } 
-        datas.clear();
-        return dataVector;
+
+        clearRes();
+        mResolution.push_back(data);
     }
 
-    std::vector<ConditionalData*> ConditionalInterpreter::fNeq(std::vector<ConditionalData*> datas)
+    void ConditionalInterpreter::fNeq(void)
     {
-        if (datas.size() != 2){
-             throw std::runtime_error("NEQ need 2 arg and get :" + datas.size());
+        if (mResolution.size() != 2){
+             throw std::runtime_error("NEQ need 2 arg and get :" + mResolution.size());
         }
-        auto a = datas[0];
-        auto b = datas[1];
+        auto a = mResolution[0];
+        auto b = mResolution[1];
 
         if (a->getType() != b->getType()){
             throw std::runtime_error("NEQ Unsuported between type :" + a->getType() +" "+ b->getType());
         }
 
-        std::vector<ConditionalData*> dataVector;
-
         ConditionalData* data = new ConditionalData;
 
         if (a->isTypeEqualTo<int>()) {
@@ -294,24 +277,19 @@ using namespace Aidge;
         {
            throw std::runtime_error("NEQ Unknown type encountered :" + a->getType() );
         }
-        dataVector.push_back(data);
-        //clear
-        for (std::size_t i = 0; i < datas.size(); ++i) {
-            delete datas[i];
-        } 
-        datas.clear();
-        return dataVector;
+
+        clearRes();
+        mResolution.push_back(data);
     }
 
-    std::vector<ConditionalData*> ConditionalInterpreter::fAnd(std::vector<ConditionalData*> datas)
+    void ConditionalInterpreter::fAnd(void)
     {
-        if (datas.size() != 2){
-           throw std::runtime_error("AND need 2 arg and get :" + datas.size());
+        if (mResolution.size() != 2){
+           throw std::runtime_error("AND need 2 arg and get :" + mResolution.size());
         }
-        auto a = datas[0];
-        auto b = datas[1];
+        auto a = mResolution[0];
+        auto b = mResolution[1];
 
-        std::vector<ConditionalData*> dataVector;
 
         if (a->getType() != typeid(bool).name() || b->getType() != typeid(bool).name()){
             throw std::runtime_error("AND Unknown type encountered need bool get :" + a->getType() );
@@ -321,24 +299,18 @@ using namespace Aidge;
         data->setValue<bool>( a->getValue<bool>() && b->getValue<bool>());
         
 
-        dataVector.push_back(data);
-         //clear
-        for (std::size_t i = 0; i < datas.size(); ++i) {
-            delete datas[i];
-        } 
-        datas.clear();
-        return dataVector;
+        clearRes();
+        mResolution.push_back(data);
     }
 
-    std::vector<ConditionalData*> ConditionalInterpreter::fOr(std::vector<ConditionalData*> datas)
+    void ConditionalInterpreter::fOr(void)
     {
-        if (datas.size() != 2){
-             throw std::runtime_error("OR need 2 arg and get :" + datas.size());
+        if (mResolution.size() != 2){
+             throw std::runtime_error("OR need 2 arg and get :" + mResolution.size());
         }
-        auto a = datas[0];
-        auto b = datas[1];
+        auto a = mResolution[0];
+        auto b = mResolution[1];
 
-        std::vector<ConditionalData*> dataVector;
 
         if (a->getType() != typeid(bool).name() || b->getType() != typeid(bool).name()){
              throw std::runtime_error("OR Unknown type encountered need bool get :" + a->getType() );
@@ -348,23 +320,16 @@ using namespace Aidge;
         data->setValue<bool>( a->getValue<bool>() || b->getValue<bool>());
         
 
-        dataVector.push_back(data);
-        //clear
-        for (std::size_t i = 0; i < datas.size(); ++i) {
-            delete datas[i];
-        } 
-        datas.clear();
-        return dataVector;
+        clearRes();
+        mResolution.push_back(data);
     }
 
-    std::vector<ConditionalData*> ConditionalInterpreter::fNot(std::vector<ConditionalData*> datas)
+    void ConditionalInterpreter::fNot()
         {
-            if (datas.size() != 1){
-                throw std::runtime_error("not need 1 arg and get :" + datas.size());
+            if (mResolution.size() != 1){
+                throw std::runtime_error("not need 1 arg and get :" + mResolution.size());
             }
-            auto a = datas[0];
-
-            std::vector<ConditionalData*> dataVector;
+            auto a = mResolution[0];
 
             if (a->getType() != typeid(bool).name()){
                 throw std::runtime_error("NOT Unknown type encountered need bool get :" + a->getType() );
@@ -373,12 +338,7 @@ using namespace Aidge;
             ConditionalData* data = new ConditionalData;
             data->setValue<bool>( !a->getValue<bool>() );
             
+            clearRes();
+            mResolution.push_back(data);
 
-            dataVector.push_back(data);
-            //clear
-            for (std::size_t i = 0; i < datas.size(); ++i) {
-                delete datas[i];
-            } 
-            datas.clear();
-            return dataVector;
         }
diff --git a/unit_tests/nodeTester/Test_ConditionalInterpreter.cpp b/unit_tests/nodeTester/Test_ConditionalInterpreter.cpp
index 4479adfcde81de36f415e44fefc2c6c5483ce758..8b502fb546e2f1396b629ebc78bc1bd4d67842e2 100644
--- a/unit_tests/nodeTester/Test_ConditionalInterpreter.cpp
+++ b/unit_tests/nodeTester/Test_ConditionalInterpreter.cpp
@@ -27,4 +27,40 @@ TEST_CASE("ConditionalInterpreter", "ConditionalInterpreter") {
         REQUIRE_THROWS_AS( ConditionalInterpreter(test), std::runtime_error);
   
     }
+
+
+    SECTION("test false int ") {
+
+        const std::string test = " 10 == 11 " ;
+        ConditionalInterpreter conditionalParser = ConditionalInterpreter(test);
+        std::shared_ptr<Node> nodeOp = GenericOperator("conv", 0, 0, 0, "Gop1");
+        bool result = conditionalParser.test(nodeOp);
+        REQUIRE(result == false);
+    }
+
+    SECTION("test true int ") {
+        const std::string test = " 42 == 42 " ;
+        ConditionalInterpreter conditionalParser = ConditionalInterpreter(test);
+        std::shared_ptr<Node> nodeOp = GenericOperator("conv", 0, 0, 0, "Gop1");
+        bool result = conditionalParser.test(nodeOp);
+        REQUIRE(result == true);
+    }
+    
+    SECTION("test false str ") {
+        const std::string test = " 'toto' == 'Corgi' " ;
+        ConditionalInterpreter conditionalParser = ConditionalInterpreter(test);
+        std::shared_ptr<Node> nodeOp = GenericOperator("conv", 0, 0, 0, "Gop1");
+        bool result = conditionalParser.test(nodeOp);
+        REQUIRE(result == false);
+    }
+
+    SECTION("test true str ") {
+
+        const std::string test = " 'Corgi' == 'Corgi' " ;
+        ConditionalInterpreter conditionalParser = ConditionalInterpreter(test);
+        std::shared_ptr<Node> nodeOp = GenericOperator("conv", 0, 0, 0, "Gop1");
+        bool result = conditionalParser.test(nodeOp);
+        REQUIRE(result == true);
+    }
+
 }
\ No newline at end of file