diff --git a/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.cpp b/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.cpp
index 51103a5951486f01ee32d0369bbb6d6c5dbfb873..c7523587655d9c085cf3233a7ce2a77322eb752e 100644
--- a/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.cpp
+++ b/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.cpp
@@ -9,23 +9,6 @@ namespace stringology {
 
 namespace indexing {
 
-automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned > NondeterministicExactSuffixAutomaton::construct ( const string::LinearString < > & pattern ) {
-	automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned > nfaSuffixAutomaton ( 0 );
-
-	nfaSuffixAutomaton.setInputAlphabet ( pattern.getAlphabet ( ) );
-
-	unsigned i = 0;
-	for ( const DefaultSymbolType & symbol : pattern.getContent ( ) ) {
-		nfaSuffixAutomaton.addState ( i++ );
-		nfaSuffixAutomaton.addTransition ( i - 1, symbol, i );
-		nfaSuffixAutomaton.addTransition ( 0, i );
-	}
-
-	nfaSuffixAutomaton.addFinalState ( i );
-
-	return nfaSuffixAutomaton;
-}
-
 auto SuffixAutomatonNondeterministicLinearString = registration::AbstractRegister < NondeterministicExactSuffixAutomaton, automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned >, const string::LinearString < > & > ( NondeterministicExactSuffixAutomaton::construct );
 
 } /* namespace indexing */
diff --git a/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.h b/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.h
index 1ea645c9732d4369db1cd5f6d0a225704e54a5cf..93c27283bf8707da1a818c01039a29c00210f2c4 100644
--- a/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.h
+++ b/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.h
@@ -18,10 +18,29 @@ public:
 	 * Nondeterministic construction of nondeterministic suffix automaton for given pattern.
 	 * @return nondeterministic suffix automaton for given pattern.
 	 */
-	static automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned > construct ( const string::LinearString < > & pattern );
+	template < class SymbolType >
+	static automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > construct ( const string::LinearString < SymbolType > & pattern );
 
 };
 
+template < class SymbolType >
+automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > NondeterministicExactSuffixAutomaton::construct ( const string::LinearString < SymbolType > & pattern ) {
+	automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > nfaSuffixAutomaton ( 0 );
+
+	nfaSuffixAutomaton.setInputAlphabet ( pattern.getAlphabet ( ) );
+
+	unsigned i = 0;
+	for ( const SymbolType & symbol : pattern.getContent ( ) ) {
+		nfaSuffixAutomaton.addState ( i++ );
+		nfaSuffixAutomaton.addTransition ( i - 1, symbol, i );
+		nfaSuffixAutomaton.addTransition ( 0, i );
+	}
+
+	nfaSuffixAutomaton.addFinalState ( i );
+
+	return nfaSuffixAutomaton;
+}
+
 } /* namespace indexing */
 
 } /* namespace stringology */