diff --git a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
index 34e481dcfc1abb829bc0c596b4342f214c1d1f8e..9c386470ee88f26a2a65470b2214f29edc46613d 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
@@ -235,13 +235,15 @@ bool AdjacencyListDirectedGraph::removeNode( const Node & node )
 
 	DirectedGraph::removeNode(node);
 
-	for (auto& i : edges) {
-		if (node == i.getFromNode()) {
-			listRemoveOne(pred[i.getToNode()], node);
-			edges.erase(i);
-		} else if (node == i.getToNode()) {
-			listRemoveOne(succ[i.getFromNode()], node);
-			edges.erase(i);
+	for ( auto iter = edges.begin ( ); iter != edges.end ( ); ) {
+		if (node == iter->getFromNode()) {
+			listRemoveOne(pred[iter->getToNode()], node);
+			iter = edges.erase ( iter );
+		} else if (node == iter->getToNode()) {
+			listRemoveOne(succ[iter->getFromNode()], node);
+			iter = edges.erase ( iter );
+		} else {
+			++iter;
 		}
 	}
 
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
index 4edc62476566a48a29505f4651c52e1d5974f135..6caf427762c485b9bc7dff83a02311ed65456ee5 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
@@ -234,12 +234,14 @@ bool AdjacencyMatrixDirectedGraph::removeNode( const Node & node )
 
 	adj.erase(search);
 
-	for (auto& i : edges) {
-		if (i.getFromNode() == node) {
-			edges.erase(i);
-		} else if (i.getToNode() == node) {
-			adj[i.getFromNode()].erase(node);
-			edges.erase(i);
+	for ( auto iter = edges.begin ( ); iter != edges.end ( ); ) {
+		if (iter->getFromNode() == node) {
+			iter = edges.erase(iter);
+		} else if (iter->getToNode() == node) {
+			adj[iter->getFromNode()].erase(node);
+			iter = edges.erase(iter);
+		} else {
+			++iter;
 		}
 	}
 
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
index 47544fdbe3ade07e91335eeb7ffeba44211ccba3..a135a4c31e2ebd8ac99cae6d3dfec51700bb6c3c 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
@@ -164,13 +164,15 @@ bool AdjacencyListUndirectedGraph::removeNode( const Node & node )
 	adj.erase(search);
 	UndirectedGraph::removeNode(node);
 
-	for (auto& i : edges) {
-		if (i.getFirstNode() == node) {
-			listRemoveOne(adj[i.getSecondNode()], node);
-			edges.erase(i);
-		} else if (i.getSecondNode() == node) {
-			listRemoveOne(adj[i.getFirstNode()], node);
-			edges.erase(i);
+	for ( auto iter = edges.begin ( ); iter != edges.end ( ); ) {
+		if (iter->getFirstNode() == node) {
+			listRemoveOne(adj[iter->getSecondNode()], node);
+			iter = edges.erase(iter);
+		} else if (iter->getSecondNode() == node) {
+			listRemoveOne(adj[iter->getFirstNode()], node);
+			iter = edges.erase(iter);
+		} else {
+			++ iter;
 		}
 	}
 
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
index 859b0d7c2ee79158024cdc5b2296728506250450..9a491f95886669d2995e4ea3b39551cf6ff7b76d 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
@@ -169,13 +169,15 @@ bool AdjacencyMatrixUndirectedGraph::removeNode( const Node & node )
 	adj.erase(search);
 	UndirectedGraph::removeNode(node);
 
-	for (auto& i : edges) {
-		if (i.getFirstNode() == node) {
-			adj[i.getSecondNode()].erase(node);
-			edges.erase(i);
-		} else if (i.getSecondNode() == node) {
-			adj[i.getFirstNode()].erase(node);
-			edges.erase(i);
+	for ( auto iter = edges.begin ( ); iter != edges.end ( ); ) {
+		if (iter->getFirstNode() == node) {
+			adj[iter->getSecondNode()].erase(node);
+			iter = edges.erase(iter);
+		} else if (iter->getSecondNode() == node) {
+			adj[iter->getFirstNode()].erase(node);
+			iter = edges.erase(iter);
+		} else {
+			++iter;
 		}
 	}