diff --git a/alib2algo/src/string/simplify/NormalizeAlphabet.cpp b/alib2algo/src/string/simplify/NormalizeAlphabet.cpp
index 34f4709f24863991ccbab0e6cc13d1ece267b78f..434378cfa0cd5afd16aee941d7aface3480f3d4e 100644
--- a/alib2algo/src/string/simplify/NormalizeAlphabet.cpp
+++ b/alib2algo/src/string/simplify/NormalizeAlphabet.cpp
@@ -8,12 +8,8 @@
 #include "NormalizeAlphabet.h"
 
 #include <map>
-#include <deque>
 #include <vector>
 #include <set>
-#include <algorithm>
-#include <sstream>
-#include <iostream>
 #include "exception/AlibException.h"
 
 #include "alphabet/Symbol.h"
@@ -23,11 +19,7 @@ namespace string {
 namespace simplify {
 
 string::String NormalizeAlphabet::normalize(const string::String& string) {
-	string::String* out = NULL;
-	string.getData().Accept((void*) &out, NormalizeAlphabet::NORMALIZE);
-	string::String res = std::move(*out);
-	delete out;
-	return res;
+	return getInstance().dispatch(string.getData());
 }
 
 string::LinearString NormalizeAlphabet::normalize(const string::LinearString& string) {
@@ -54,20 +46,7 @@ string::LinearString NormalizeAlphabet::normalize(const string::LinearString& st
 	return result;
 }
 
-void NormalizeAlphabet::Visit(void*, const string::Epsilon&) const {
-	throw exception::AlibException("Unsupported automaton type Epsilon");
-}
-
-void NormalizeAlphabet::Visit(void* data, const string::LinearString& str) const {
-	string::String* & out = *((string::String**) data);
-	out = new string::String(this->normalize(str));
-}
-
-void NormalizeAlphabet::Visit(void*, const string::CyclicString&) const {
-	throw exception::AlibException("Unsupported automaton type CyclicString");
-}
-
-const NormalizeAlphabet NormalizeAlphabet::NORMALIZE;
+auto NormalizeAlphabetLinearString = NormalizeAlphabet::RegistratorWrapper<string::LinearString, string::LinearString>(NormalizeAlphabet::getInstance(), NormalizeAlphabet::normalize);
 
 } /* namespace simplify */
 
diff --git a/alib2algo/src/string/simplify/NormalizeAlphabet.h b/alib2algo/src/string/simplify/NormalizeAlphabet.h
index ae869d9fa4f23b1060b33c56c8c9e38b0a1576cd..1efc99894c866becc48578b3822f1aad1117acb3 100644
--- a/alib2algo/src/string/simplify/NormalizeAlphabet.h
+++ b/alib2algo/src/string/simplify/NormalizeAlphabet.h
@@ -8,6 +8,8 @@
 #ifndef NORMALIZE_ALPHABET_H_
 #define NORMALIZE_ALPHABET_H_
 
+#include <common/multipleDispatch.hpp>
+
 #include <string/LinearString.h>
 #include <string/String.h>
 
@@ -15,10 +17,8 @@ namespace string {
 
 namespace simplify {
 
-class NormalizeAlphabet : public string::VisitableStringBase::const_visitor_type {
+class NormalizeAlphabet : public std::SingleDispatch<string::String, string::StringBase> {
 public:
-	NormalizeAlphabet() {}
-
 	/**
 	 * @param dfa automaton to normalize
 	 */
@@ -26,12 +26,10 @@ public:
 
 	static string::LinearString normalize(const string::LinearString& str);
 
-protected:
-	void Visit(void*, const string::Epsilon& string) const;
-	void Visit(void*, const string::LinearString& string) const;
-	void Visit(void*, const string::CyclicString& string) const;
-
-	static const NormalizeAlphabet NORMALIZE;
+	static NormalizeAlphabet& getInstance() {
+		static NormalizeAlphabet res;
+		return res;
+	}
 };
 
 } /* namespace simplify */
diff --git a/alib2algo/src/string/simplify/NormalizeRotation.cpp b/alib2algo/src/string/simplify/NormalizeRotation.cpp
index 7eaedbcd504373faf96dc588ac5af3c26435c32c..55c0b06809405008e271b3502d164929cf4e6efc 100644
--- a/alib2algo/src/string/simplify/NormalizeRotation.cpp
+++ b/alib2algo/src/string/simplify/NormalizeRotation.cpp
@@ -6,10 +6,7 @@
  */
 
 #include "NormalizeRotation.h"
-#include <exception/AlibException.h>
 
-#include <string/Epsilon.h>
-#include <string/LinearString.h>
 #include <string/CyclicString.h>
 
 namespace string {
@@ -17,11 +14,7 @@ namespace string {
 namespace simplify {
 
 string::String NormalizeRotation::normalize(const string::String& string) {
-	string::String* out = NULL;
-	string.getData().Accept((void*) &out, NormalizeRotation::NORMALIZE_ROTATION);
-	string::String res = std::move(*out);
-	delete out;
-	return res;
+	return getInstance().dispatch(string.getData());
 }
 
 string::CyclicString NormalizeRotation::normalize(const string::CyclicString& string) {
@@ -61,20 +54,7 @@ string::CyclicString NormalizeRotation::normalize(const string::CyclicString& st
 	return string::CyclicString { string.getAlphabet(), rotated };
 }
 
-void NormalizeRotation::Visit(void*, const string::Epsilon&) const {
-	throw exception::AlibException("Unsupported string type Epsilon");
-}
-
-void NormalizeRotation::Visit(void*, const string::LinearString&) const {
-	throw exception::AlibException("Unsupported string type LinearString");
-}
-
-void NormalizeRotation::Visit(void* data, const string::CyclicString& string) const {
-	string::String* & res = *((string::String**) data);
-	res = new string::String(this->normalize(string));
-}
-
-const NormalizeRotation NormalizeRotation::NORMALIZE_ROTATION;
+auto NormalizeRotationCyclicString = NormalizeRotation::RegistratorWrapper<string::CyclicString, string::CyclicString>(NormalizeRotation::getInstance(), NormalizeRotation::normalize);
 
 } /* namespace simplify */
 
diff --git a/alib2algo/src/string/simplify/NormalizeRotation.h b/alib2algo/src/string/simplify/NormalizeRotation.h
index 1a426dd51aa0b7b04a5bc3ddf6dd81bc02f2b5ea..b8c1817fb67185e4253966ea59444017843857d2 100644
--- a/alib2algo/src/string/simplify/NormalizeRotation.h
+++ b/alib2algo/src/string/simplify/NormalizeRotation.h
@@ -8,16 +8,16 @@
 #ifndef _NORMALIZE_ROTATION_H__
 #define _NORMALIZE_ROTATION_H__
 
+#include <common/multipleDispatch.hpp>
+
 #include <string/String.h>
 
 namespace string {
 
 namespace simplify {
 
-class NormalizeRotation : public string::VisitableStringBase::const_visitor_type {
+class NormalizeRotation : public std::SingleDispatch<string::String, string::StringBase> {
 public:
-	NormalizeRotation() {}
-
 	/**
 	 * Performs conversion.
 	 * @return left regular grammar equivalent to source automaton.
@@ -25,12 +25,11 @@ public:
 	static string::String normalize(const string::String& string);
 
 	static string::CyclicString normalize(const string::CyclicString& string);
-private:
-	void Visit(void*, const Epsilon& string) const;
-	void Visit(void*, const LinearString& string) const;
-	void Visit(void*, const CyclicString& string) const;
 
-	static const NormalizeRotation NORMALIZE_ROTATION;
+	static NormalizeRotation& getInstance() {
+		static NormalizeRotation res;
+		return res;
+	}
 };
 
 } /* namespace simplify */