diff --git a/src/graph/Matching.cpp b/src/graph/Matching.cpp
index 22be1347aa7ef108f593d3aabe3ff6d75c9312b1..4a62019a7aa044ebcf2089d91f3ba097d85218e7 100644
--- a/src/graph/Matching.cpp
+++ b/src/graph/Matching.cpp
@@ -642,6 +642,10 @@ bool Aidge::SinglePassGraphMatching::matchNode(Context& ctx, std::set<MatchingRe
 
                 for (const auto& output : outputs) {
                     for (const auto& node : output) {
+                        if (!node.first) {
+                            continue;
+                        }
+
                         if (newCtx.edgeRightIdx == gk_IODefaultIndex || node.second == newCtx.edgeRightIdx) {
                             if (mGraph->inView(node.first) && !it->graph->inView(node.first)) {
                                 found = true;
@@ -663,6 +667,10 @@ bool Aidge::SinglePassGraphMatching::matchNode(Context& ctx, std::set<MatchingRe
                     : it->startNode->inputs();
 
                 for (const auto& input : inputs) {
+                    if (!input.first) {
+                        continue;
+                    }
+
                     if (newCtx.edgeRightIdx == gk_IODefaultIndex || input.second == newCtx.edgeRightIdx) {
                         if (mGraph->inView(input.first) && !it->graph->inView(input.first)) {
                             found = true;
@@ -741,6 +749,10 @@ bool Aidge::SinglePassGraphMatching::matchNode(Context& ctx, std::set<MatchingRe
                     }
 
                     for (const auto& node : output) {
+                        if (!node.first) {
+                            continue;
+                        }
+
                         if ((type.empty() || node.first->type() == type)
                             && (lambda.empty() || mLambda.at(lambda)(node.first))
                             && (newCtx.edgeRightIdx == gk_IODefaultIndex || node.second == newCtx.edgeRightIdx))
@@ -775,6 +787,10 @@ bool Aidge::SinglePassGraphMatching::matchNode(Context& ctx, std::set<MatchingRe
                     : it->startNode->inputs();
 
                 for (const auto& input : inputs) {
+                    if (!input.first) {
+                        continue;
+                    }
+
                     if ((type.empty() || input.first->type() == type)
                         && (lambda.empty() || mLambda.at(lambda)(input.first))
                         && (newCtx.edgeRightIdx == gk_IODefaultIndex || input.second == newCtx.edgeRightIdx))