diff --git a/alib2data/src/alphabet/NonlinearVariableSymbol.h b/alib2data/src/alphabet/NonlinearVariableSymbol.h
index 13a8fb9bcac744c27295997a8841bb8ccbb42fc8..08a93a59e590d337266f021174e293845b8a0e2a 100644
--- a/alib2data/src/alphabet/NonlinearVariableSymbol.h
+++ b/alib2data/src/alphabet/NonlinearVariableSymbol.h
@@ -101,7 +101,9 @@ const SymbolType& NonlinearVariableSymbol < SymbolType >::getSymbol() const {
 
 template < class SymbolType >
 int NonlinearVariableSymbol < SymbolType >::compare ( const NonlinearVariableSymbol & other ) const {
-	return this->m_symbol.getData ( ).compare ( other.m_symbol.getData ( ) );
+	std::compare < decltype ( m_symbol ) > comp;
+
+	return comp ( m_symbol, other.m_symbol );
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/regexp/formal/FormalRegExpSymbol.h b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
index 25b2528750e97555e8a1d0d8d826b33167fad297..c48c6a97d7128dd5f22ad1d31e7eab362e72a74d 100644
--- a/alib2data/src/regexp/formal/FormalRegExpSymbol.h
+++ b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
@@ -26,10 +26,6 @@ public:
 		visitor.visit ( * this );
 	}
 
-	explicit FormalRegExpSymbol ( int number ); // TODO remove these
-	explicit FormalRegExpSymbol ( char character );
-	explicit FormalRegExpSymbol ( const std::string & label );
-
 	explicit FormalRegExpSymbol ( SymbolType symbol );
 
 	/**
@@ -89,18 +85,6 @@ public:
 
 namespace regexp {
 
-template < class SymbolType >
-FormalRegExpSymbol < SymbolType >::FormalRegExpSymbol ( int number ) : m_symbol ( alphabet::symbolFrom ( number ) ) {
-}
-
-template < class SymbolType >
-FormalRegExpSymbol < SymbolType >::FormalRegExpSymbol ( char character ) : m_symbol ( alphabet::symbolFrom ( character ) ) {
-}
-
-template < class SymbolType >
-FormalRegExpSymbol < SymbolType >::FormalRegExpSymbol ( const std::string & label ) : m_symbol ( alphabet::symbolFrom ( label ) ) {
-}
-
 template < class SymbolType >
 FormalRegExpSymbol < SymbolType >::FormalRegExpSymbol ( SymbolType symbol ) : m_symbol ( std::move ( symbol ) ) {
 }
@@ -122,7 +106,9 @@ std::smart_ptr < UnboundedRegExpElement < SymbolType > > FormalRegExpSymbol < Sy
 
 template < class SymbolType >
 int FormalRegExpSymbol < SymbolType >::compare ( const FormalRegExpSymbol & other ) const {
-	return m_symbol.getData ( ).compare ( other.m_symbol.getData ( ) );
+	std::compare < decltype ( m_symbol ) > comp;
+
+	return comp ( m_symbol, other.m_symbol );
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
index a21e8bf342f42ffda4d7ae8b659c1dca9a20c203..c1ada6f4ecc4c4a5dc1729a32693b79882a5b6de 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
@@ -26,10 +26,6 @@ public:
 		visitor.visit ( * this );
 	}
 
-	explicit UnboundedRegExpSymbol ( int number );
-	explicit UnboundedRegExpSymbol ( char character );
-	explicit UnboundedRegExpSymbol ( const std::string & label );
-
 	explicit UnboundedRegExpSymbol ( SymbolType symbol );
 
 	/**
@@ -91,18 +87,6 @@ public:
 
 namespace regexp {
 
-template < class SymbolType >
-UnboundedRegExpSymbol < SymbolType >::UnboundedRegExpSymbol ( int number ) : m_symbol ( alphabet::symbolFrom ( number ) ) {
-}
-
-template < class SymbolType >
-UnboundedRegExpSymbol < SymbolType >::UnboundedRegExpSymbol ( char character ) : m_symbol ( alphabet::symbolFrom ( character ) ) {
-}
-
-template < class SymbolType >
-UnboundedRegExpSymbol < SymbolType >::UnboundedRegExpSymbol ( const std::string & label ) : m_symbol ( alphabet::symbolFrom ( label ) ) {
-}
-
 template < class SymbolType >
 UnboundedRegExpSymbol < SymbolType >::UnboundedRegExpSymbol ( SymbolType symbol ) : m_symbol ( std::move ( symbol ) ) {
 }
@@ -124,7 +108,9 @@ std::smart_ptr < FormalRegExpElement < SymbolType > > UnboundedRegExpSymbol < Sy
 
 template < class SymbolType >
 int UnboundedRegExpSymbol < SymbolType >::compare ( const UnboundedRegExpSymbol & other ) const {
-	return m_symbol.getData ( ).compare ( other.m_symbol.getData ( ) );
+	std::compare < decltype ( m_symbol ) > comp;
+
+	return comp ( m_symbol, other.m_symbol );
 }
 
 template < class SymbolType >
diff --git a/alib2data/test-src/regexp/RegExpTest.cpp b/alib2data/test-src/regexp/RegExpTest.cpp
index 52d806644c2630cef9fd40a99b3b8b0286a9bcee..7b3e3cbc202f71c326c412b6801929fd4af174d2 100644
--- a/alib2data/test-src/regexp/RegExpTest.cpp
+++ b/alib2data/test-src/regexp/RegExpTest.cpp
@@ -27,8 +27,8 @@ void RegExpTest::tearDown() {
 
 void RegExpTest::testCopyConstruct() {
 	{
-		regexp::UnboundedRegExpSymbol < alphabet::Symbol > l1 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >("1");
-		regexp::UnboundedRegExpSymbol < alphabet::Symbol > l2 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >("2");
+		regexp::UnboundedRegExpSymbol < alphabet::Symbol > l1 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "1" ) );
+		regexp::UnboundedRegExpSymbol < alphabet::Symbol > l2 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "2" ) );
 
 		regexp::UnboundedRegExpConcatenation < alphabet::Symbol > con = regexp::UnboundedRegExpConcatenation < alphabet::Symbol >();
 		con.appendElement(l1);
@@ -51,8 +51,8 @@ void RegExpTest::testCopyConstruct() {
 		CPPUNIT_ASSERT( regexp2 == regexp3 );
 	}
 	{
-		regexp::FormalRegExpSymbol < alphabet::Symbol > l1 = regexp::FormalRegExpSymbol < alphabet::Symbol >("1");
-		regexp::FormalRegExpSymbol < alphabet::Symbol > l2 = regexp::FormalRegExpSymbol < alphabet::Symbol >("2");
+		regexp::FormalRegExpSymbol < alphabet::Symbol > l1 = regexp::FormalRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "1" ) );
+		regexp::FormalRegExpSymbol < alphabet::Symbol > l2 = regexp::FormalRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "2" ) );
 
 		regexp::FormalRegExpConcatenation < alphabet::Symbol > con = regexp::FormalRegExpConcatenation < alphabet::Symbol >(l1, l2);
 
@@ -71,8 +71,8 @@ void RegExpTest::testCopyConstruct() {
 		CPPUNIT_ASSERT( regexp2 == regexp3 );
 	}
 	{
-		regexp::FormalRegExpSymbol < alphabet::Symbol > l1 = regexp::FormalRegExpSymbol < alphabet::Symbol >("1");
-		regexp::FormalRegExpSymbol < alphabet::Symbol > l2 = regexp::FormalRegExpSymbol < alphabet::Symbol >("2");
+		regexp::FormalRegExpSymbol < alphabet::Symbol > l1 = regexp::FormalRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "1" ) );
+		regexp::FormalRegExpSymbol < alphabet::Symbol > l2 = regexp::FormalRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "2" ) );
 
 		regexp::FormalRegExpConcatenation < alphabet::Symbol > con = regexp::FormalRegExpConcatenation < alphabet::Symbol >(l1, l2);
 
@@ -91,8 +91,8 @@ void RegExpTest::testCopyConstruct() {
 
 void RegExpTest::testXMLParser() {
 
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > l1 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >("1");
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > l2 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >("2");
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > l1 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "1" ) );
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > l2 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "2" ) );
 
 	regexp::UnboundedRegExpConcatenation < alphabet::Symbol > con = regexp::UnboundedRegExpConcatenation < alphabet::Symbol >();
 	con.appendElement(l1);
@@ -128,7 +128,7 @@ void RegExpTest::testXMLParser() {
 }
 
 void RegExpTest::testOrder() {
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s1("1");
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s1( alphabet::symbolFrom ( "1" ) );
 	regexp::UnboundedRegExpEmpty < alphabet::Symbol > e1;
 	regexp::UnboundedRegExpEpsilon < alphabet::Symbol > e2;
 	regexp::UnboundedRegExpIteration < alphabet::Symbol > i1(s1);
@@ -328,9 +328,9 @@ void RegExpTest::testOrder() {
 }
 
 void RegExpTest::testOrder2() {
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s1("1");
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s2("2");
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s3("3");
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s1( alphabet::symbolFrom ( "1" ) );
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s2( alphabet::symbolFrom ( "2" ) );
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s3( alphabet::symbolFrom ( "3" ) );
 
 	regexp::UnboundedRegExpEmpty < alphabet::Symbol > e1;
 	regexp::UnboundedRegExpEpsilon < alphabet::Symbol > e2;