diff --git a/alib2algo/src/stringology/query/BNDMOccurrences.h b/alib2algo/src/stringology/query/BNDMOccurrences.h
index 5c8b0134b6defc87e721fd69f87fdba1e6b7029d..bc86cc6aa66531e04c2794a44f3053bf04bd2280 100644
--- a/alib2algo/src/stringology/query/BNDMOccurrences.h
+++ b/alib2algo/src/stringology/query/BNDMOccurrences.h
@@ -49,7 +49,7 @@ ext::set < unsigned > BNDMOccurrences::query ( const indexes::stringology::BitSe
 
 	ext::bitset < BitmaskBitCount > currentBitmask;
 
-	while ( posInSubject <= subjectLength - patternLength ) {
+	while ( posInSubject + patternLength <= subjectLength ) {
 		size_t posInPattern = bitmaskLength;
 		size_t lastPosOfFactor = bitmaskLength;
 
diff --git a/alib2algo/src/stringology/query/BackwardDAWGMatching.h b/alib2algo/src/stringology/query/BackwardDAWGMatching.h
index b8588a29b3f8973c397a9b9b9dc21e7f9e487072..2423b4b131cc95e9e4ad9852640d8a2de7d4fdae 100644
--- a/alib2algo/src/stringology/query/BackwardDAWGMatching.h
+++ b/alib2algo/src/stringology/query/BackwardDAWGMatching.h
@@ -38,7 +38,7 @@ ext::set < unsigned > BackwardDAWGMatching::match ( const string::LinearString <
 	bool fail;
 	size_t posInSubject = 0;
 
-	while ( posInSubject <= subjectSize - patternSize ) {
+	while ( posInSubject + patternSize <= subjectSize ) {
 		unsigned currentState = suffixAutomaton.getAutomaton ( ).getInitialState ( );
 
 		size_t posInPattern = patternSize;
diff --git a/alib2algo/src/stringology/query/BackwardOracleMatching.h b/alib2algo/src/stringology/query/BackwardOracleMatching.h
index 23deda7ffc2bcefbb58675e74d7812b8731d61c3..7195233a7b236dee7dac9df991a4436bb90e0851 100644
--- a/alib2algo/src/stringology/query/BackwardOracleMatching.h
+++ b/alib2algo/src/stringology/query/BackwardOracleMatching.h
@@ -40,7 +40,7 @@ ext::set < unsigned > BackwardOracleMatching::match ( const string::LinearString
 	bool fail;
 	size_t posInSubject = 0;
 
-	while ( posInSubject <= subjectSize - patternSize ) {
+	while ( posInSubject + patternSize <= subjectSize ) {
 
 		StateType currentState = factorOracle.getInitialState ( );
 
diff --git a/alib2algo/src/stringology/query/WideBNDMOccurrences.h b/alib2algo/src/stringology/query/WideBNDMOccurrences.h
index ee5eb814e4539a7ffe0134bd21b7cf8bca5ba715..4ad8d0c32f8c15d60099f32dbe34a38fe1d23756 100644
--- a/alib2algo/src/stringology/query/WideBNDMOccurrences.h
+++ b/alib2algo/src/stringology/query/WideBNDMOccurrences.h
@@ -48,7 +48,7 @@ ext::set < unsigned > WideBNDMOccurrences::query ( const indexes::stringology::B
 	ext::vector < bool > currentBitmask;
 	currentBitmask.resize ( patternLength );
 
-	while ( posInSubject <= subjectLength - patternLength ) {
+	while ( posInSubject + patternLength <= subjectLength ) {
 		size_t posInPattern = patternLength;
 		size_t lastPosOfFactor = patternLength;