diff --git a/alib2algo/src/arbology/exact/ExactPatternMatch.h b/alib2algo/src/arbology/exact/ExactPatternMatch.h
index d51bb809e290fce91eecd4838d2c569b795c0129..824fbe3ff8b5a5836efa4d7d165c60415a307792 100644
--- a/alib2algo/src/arbology/exact/ExactPatternMatch.h
+++ b/alib2algo/src/arbology/exact/ExactPatternMatch.h
@@ -92,12 +92,17 @@ bool ExactPatternMatch::matchHelper ( const ext::tree < SymbolType > & subject,
 
 	if ( subject.getData ( ) != pattern.getData ( ) ) return false;
 
-	if ( subject.getChildren ( ).size ( ) != pattern.getChildren ( ).size ( ) ) return false;
+	auto patternIter = pattern.getChildren ( ).begin ( );
+	auto subjectIter = subject.getChildren ( ).begin ( );
 
-	for ( const ext::tuple < const ext::tree < SymbolType > &, const ext::tree < SymbolType > & > & childs : ext::make_tuple_foreach ( subject.getChildren ( ), pattern.getChildren ( ) ) )
-		if ( !matchHelper ( std::get < 0 > ( childs ), std::get < 1 > ( childs ), subtreeVariable ) ) return false;
+	while ( patternIter != pattern.getChildren ( ).end ( ) || subjectIter != subject.getChildren ( ).end ( ) ) {
+		if ( matchHelper ( * subjectIter, * patternIter, subtreeVariable ) )
+			++ patternIter;
 
-	return true;
+		++ subjectIter;
+	}
+
+	return patternIter == pattern.getChildren ( ).end ( );
 }
 
 template < class SymbolType >
diff --git a/alib2algo/src/arbology/exact/ExactSubtreeMatch.h b/alib2algo/src/arbology/exact/ExactSubtreeMatch.h
index 5ee6bccadf93b9664af1d167f3de4b3ae1e0eb34..c754d7545bc7da2e1c8ef4da06aebce38a90fe90 100644
--- a/alib2algo/src/arbology/exact/ExactSubtreeMatch.h
+++ b/alib2algo/src/arbology/exact/ExactSubtreeMatch.h
@@ -54,12 +54,17 @@ template < class SymbolType >
 bool ExactSubtreeMatch::matchHelper ( const ext::tree < SymbolType > & subject, const ext::tree < SymbolType > & pattern ) {
 	if ( subject.getData ( ) != pattern.getData ( ) ) return false;
 
-	if ( subject.getChildren ( ).size ( ) != pattern.getChildren ( ).size ( ) ) return false;
+	auto patternIter = pattern.getChildren ( ).begin ( );
+	auto subjectIter = subject.getChildren ( ).begin ( );
 
-	for ( const ext::tuple < const ext::tree < SymbolType > &, const ext::tree < SymbolType > & > & childs : ext::make_tuple_foreach ( subject.getChildren ( ), pattern.getChildren ( ) ) )
-		if ( !matchHelper ( std::get < 0 > ( childs ), std::get < 1 > ( childs ) ) ) return false;
+	while ( patternIter != pattern.getChildren ( ).end ( ) || subjectIter != subject.getChildren ( ).end ( ) ) {
+		if ( matchHelper ( * subjectIter, * patternIter ) )
+			++ patternIter;
 
-	return true;
+		++ subjectIter;
+	}
+
+	return patternIter == pattern.getChildren ( ).end ( );
 }
 
 template < class SymbolType >