diff --git a/aconvert2/src/GasTexConverter.cpp b/aconvert2/src/GasTexConverter.cpp
index e72eeec23ce63f2f4e487be99d6503f1f1e62c20..d8635bcbe1700aa6559c76cbd97b4809fd82a6f2 100644
--- a/aconvert2/src/GasTexConverter.cpp
+++ b/aconvert2/src/GasTexConverter.cpp
@@ -744,7 +744,7 @@ void GasTexConverter::transitions(const automaton::EpsilonNFA& fsm, std::ostream
 	std::map<std::pair<std::string, std::string>, std::string> transitionMap;
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol;
 			if (transition.first.second.is<string::Epsilon>()) {
@@ -768,7 +768,7 @@ void GasTexConverter::transitions(const automaton::MultiInitialStateNFA& fsm, st
 	std::map<std::pair<std::string, std::string>, std::string> transitionMap;
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol = (std::string) transition.first.second;
 
@@ -787,7 +787,7 @@ void GasTexConverter::transitions(const automaton::NFA& fsm, std::ostream& out)
 	std::map<std::pair<std::string, std::string>, std::string> transitionMap;
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol = (std::string) transition.first.second;
 
@@ -805,7 +805,7 @@ void GasTexConverter::transitions(const automaton::NFA& fsm, std::ostream& out)
 void GasTexConverter::transitions(const automaton::DFA& fsm, std::ostream& out) {
 	std::map<std::pair<std::string, std::string>, std::string> transitionMap;
 	for (const auto& transition : fsm.getTransitions()) {
-		std::pair<std::string, std::string> key(transition.first.first.getName(), transition.second.getName());
+		std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) transition.second.getName());
 
 		std::string symbol = (std::string) transition.first.second;
 
@@ -824,7 +824,7 @@ void GasTexConverter::transitions(const automaton::ExtendedNFA& fsm, std::ostrea
 
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol = alib::StringDataFactory::toString(transition.first.second);
 
@@ -844,7 +844,7 @@ void GasTexConverter::transitions(const automaton::CompactNFA& fsm, std::ostream
 
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol = alib::StringDataFactory::toString(string::String(transition.first.second));
 
diff --git a/alib2algo/src/common/StringContainerConverter.hpp b/alib2algo/src/common/StringContainerConverter.hpp
index 4e08635d39e5cb616091bc0f070801d4502c8a2f..e37a80ef87ba27b3dff31632643a7e6eaccc441e 100644
--- a/alib2algo/src/common/StringContainerConverter.hpp
+++ b/alib2algo/src/common/StringContainerConverter.hpp
@@ -67,8 +67,7 @@ inline void VisitHelper(void* data, const string::Epsilon& text) {
 
 template<class R, class S, class T>
 void StringContainerConverter<R, S, T>::Visit(void* data, const string::Epsilon& text) const {
-	T* & out = *((T**) data);
-	out = new T(text);
+	VisitHelper<R, S, T>(data, text);
 }
 
 
@@ -88,8 +87,7 @@ inline void VisitHelper(void* data, const string::LinearString& text) {
 
 template<class R, class S, class T>
 void StringContainerConverter<R, S, T>::Visit(void* data, const string::LinearString& text) const {
-	T* & out = *((T**) data);
-	out = new T(text);
+	VisitHelper<R, S, T>(data, text);
 }
 
 
@@ -109,8 +107,7 @@ inline void VisitHelper(void*, const string::CyclicString&) {
 
 template<class R, class S, class T>
 void StringContainerConverter<R, S, T>::Visit(void* data, const string::CyclicString& text) const {
-	T* & out = *((T**) data);
-	out = new T(text); //TODO tohle by melo vyhodit kompilacni chybu pro T = string::LinearString ale nehodi ...
+	VisitHelper<R, S, T>(data, text);
 }
 
 
diff --git a/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp b/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp
index 7c47c7a4c1c1e56388a62d56ce32bfc7dccf6cde..d74cc963c39038b70efb1e6e88841f8148a238ba 100644
--- a/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp
+++ b/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp
@@ -9,6 +9,9 @@
 
 #include "label/Label.h"
 #include "label/LabelPairLabel.h"
+#include "label/ObjectLabel.h"
+
+#include "object/Object.h"
 
 #include "../GlushkovTraversal.h"
 #include "../GlushkovPair.h"
@@ -50,7 +53,7 @@ automaton::NFA ToAutomatonGlushkov::convert(const regexp::UnboundedRegExp& regex
 	std::map<regexp::GlushkovSymbol, automaton::State> stateMap;
 
 	for( auto const& symbol : regexp::GlushkovTraversal::getSymbols( regexp ) ) {
-		automaton::State q( label::Label( label::LabelPairLabel( std::make_pair( label::labelFrom( symbol.getInputSymbol( ) ), label::labelFrom( symbol.getId( ) ) ) ) ) );
+		automaton::State q( label::Label( label::LabelPairLabel( std::make_pair( label::Label( label::ObjectLabel( alib::Object( symbol.getInputSymbol( ).getData() ) ) ), label::labelFrom( symbol.getId( ) ) ) ) ) );
 
 		stateMap.insert( std::make_pair( symbol, q ) );
 		automaton.addState( q );
diff --git a/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp b/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp
index 7821ef3a9e207001ec7e0f1462a49a6a03291308..f2769c663397efa3445f51a0419520f78fa00d01 100644
--- a/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp
+++ b/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp
@@ -12,6 +12,9 @@
 #include <alphabet/LabeledSymbol.h>
 
 #include <label/LabelPairLabel.h>
+#include <label/ObjectLabel.h>
+
+#include <object/Object.h>
 
 #include "../GlushkovTraversal.h"
 #include "../GlushkovPair.h"
@@ -54,7 +57,7 @@ grammar::RightRG ToGrammarRightRGGlushkov::convert(const regexp::UnboundedRegExp
 
 	for(const auto& symbol : regexp::GlushkovTraversal::getSymbols(regexp))
 	{
-		alphabet::Symbol nt(alphabet::LabeledSymbol(label::Label(label::LabelPairLabel(std::make_pair(label::labelFrom(symbol.getInputSymbol()), label::labelFrom(symbol.getId()))))));
+		alphabet::Symbol nt(alphabet::LabeledSymbol(label::Label(label::LabelPairLabel(std::make_pair(label::Label( label::ObjectLabel( alib::Object( symbol.getInputSymbol( ).getData() ) ) ), label::labelFrom(symbol.getId()))))));
 		symbolMap.insert(std::make_pair(symbol, nt));
 		grammar.addNonterminalSymbol(nt);
 	}
diff --git a/alib2data/src/alphabet/BarSymbol.h b/alib2data/src/alphabet/BarSymbol.h
index 4e8daaaf62e781bb480dfd2f29bd80c6dcb84c00..9b928307dae2842573306104e1fe00f90da6f454 100644
--- a/alib2data/src/alphabet/BarSymbol.h
+++ b/alib2data/src/alphabet/BarSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<BarSymbol>();
diff --git a/alib2data/src/alphabet/BlankSymbol.h b/alib2data/src/alphabet/BlankSymbol.h
index bf7f2d1312b68e8f5e3ca8a8c254b69e5a812a2e..818eee2cfb3fc63f29b2d9f0d79b6f2c071c6c08 100644
--- a/alib2data/src/alphabet/BlankSymbol.h
+++ b/alib2data/src/alphabet/BlankSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<BlankSymbol>();
diff --git a/alib2data/src/alphabet/BottomOfTheStackSymbol.h b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
index 99abe4f709b7fa26916ff01ab20da31c01c2bcd8..61c93e15d89acf48785caf76de3b2dd9e6dd58d7 100644
--- a/alib2data/src/alphabet/BottomOfTheStackSymbol.h
+++ b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<BottomOfTheStackSymbol>();
diff --git a/alib2data/src/alphabet/EndSymbol.h b/alib2data/src/alphabet/EndSymbol.h
index 50a735a32472fb9bdb29999aa7805759aa245448..e2edbd994f8681a9b6bfae0afec7cf96e6980819 100644
--- a/alib2data/src/alphabet/EndSymbol.h
+++ b/alib2data/src/alphabet/EndSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<EndSymbol>();
diff --git a/alib2data/src/alphabet/LabeledSymbol.h b/alib2data/src/alphabet/LabeledSymbol.h
index 9e8192ed099df861b1e46467a21bd33e9ca98fed..a7bd502ed9259c14ab12ff9aa2b731bd6dc7030b 100644
--- a/alib2data/src/alphabet/LabeledSymbol.h
+++ b/alib2data/src/alphabet/LabeledSymbol.h
@@ -49,7 +49,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LabeledSymbol>();
diff --git a/alib2data/src/alphabet/RankedBarSymbol.h b/alib2data/src/alphabet/RankedBarSymbol.h
index bbd6fa8acddf5870b680ca788348376d86fc239e..4c6479bb3db378f64453d5b306570304fa1833cd 100644
--- a/alib2data/src/alphabet/RankedBarSymbol.h
+++ b/alib2data/src/alphabet/RankedBarSymbol.h
@@ -42,7 +42,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<RankedBarSymbol>();
diff --git a/alib2data/src/alphabet/RankedSymbol.h b/alib2data/src/alphabet/RankedSymbol.h
index 0b4d86a0aba1acb2349d8e2fb77e1a8133478eb0..aab04969a5d30d7d4135761e9f3090f2e7c8a8dd 100644
--- a/alib2data/src/alphabet/RankedSymbol.h
+++ b/alib2data/src/alphabet/RankedSymbol.h
@@ -57,7 +57,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<RankedSymbol>();
diff --git a/alib2data/src/alphabet/StartSymbol.h b/alib2data/src/alphabet/StartSymbol.h
index 4cab940a1aecba34a282686be65baba96238b0ad..b22b5bd13ef29ec5a2273908a22e2544605b1bef 100644
--- a/alib2data/src/alphabet/StartSymbol.h
+++ b/alib2data/src/alphabet/StartSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<StartSymbol>();
diff --git a/alib2data/src/alphabet/SubtreeWildcardSymbol.h b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
index 6c1480a898a46bddc32b65de9d42f5db18892a95..a8facf57eefe65b45e382d21f723a06634598c15 100644
--- a/alib2data/src/alphabet/SubtreeWildcardSymbol.h
+++ b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<SubtreeWildcardSymbol>();
diff --git a/alib2data/src/alphabet/SymbolPairSymbol.h b/alib2data/src/alphabet/SymbolPairSymbol.h
index 80f435d04f91701ccc8a9a54ea54be5a4b5e3d56..eea27dc43b44fc564c3ae30e49682e15d1773af2 100644
--- a/alib2data/src/alphabet/SymbolPairSymbol.h
+++ b/alib2data/src/alphabet/SymbolPairSymbol.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<SymbolPairSymbol>();
diff --git a/alib2data/src/alphabet/SymbolSetSymbol.h b/alib2data/src/alphabet/SymbolSetSymbol.h
index a07cebf68069e07c59802f0974ee1f94c40a2bad..99596f2254874a1166757abef18d934cf121fb6d 100644
--- a/alib2data/src/alphabet/SymbolSetSymbol.h
+++ b/alib2data/src/alphabet/SymbolSetSymbol.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<SymbolSetSymbol>();
diff --git a/alib2data/src/alphabet/UniqueSymbol.h b/alib2data/src/alphabet/UniqueSymbol.h
index 7c8e95a85ee764781978b8bdfa8b9e24bfc33388..e8d75a7887e136e6da6b33a4972ff5531c016ac6 100644
--- a/alib2data/src/alphabet/UniqueSymbol.h
+++ b/alib2data/src/alphabet/UniqueSymbol.h
@@ -52,7 +52,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<UniqueSymbol>();
diff --git a/alib2data/src/automaton/FSM/CompactNFA.h b/alib2data/src/automaton/FSM/CompactNFA.h
index 26c8e8be07e290c12967946c0372e945cfcb096b..0650bf0423b4c74ec1896042f41595d97c7ece4c 100644
--- a/alib2data/src/automaton/FSM/CompactNFA.h
+++ b/alib2data/src/automaton/FSM/CompactNFA.h
@@ -87,7 +87,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<CompactNFA>();
diff --git a/alib2data/src/automaton/FSM/DFA.h b/alib2data/src/automaton/FSM/DFA.h
index b0552f6d68752e4c7090e1f103314c03cb21d2ee..3264fd3c7bf1460039bd0690bc4dbd16bd8f4412 100644
--- a/alib2data/src/automaton/FSM/DFA.h
+++ b/alib2data/src/automaton/FSM/DFA.h
@@ -27,7 +27,7 @@ public:
 	explicit DFA(const State& initialState);
 
 	virtual AutomatonBase* clone() const;
-	
+
 	virtual AutomatonBase* plunder() &&;
 
 	/**
@@ -39,7 +39,7 @@ public:
 	 * @copydoc Automaton::removeInputSymbol(const Symbol&)
 	 */
 	virtual bool removeInputSymbol(const alphabet::Symbol& symbol);
-	
+
 	/**
 	 * Adds transition defined by parameters to the automaton.
 	 * @param current current state
@@ -65,7 +65,7 @@ public:
 	 * @return automaton transitions from state
 	 */
 	std::map<std::pair<State, alphabet::Symbol>, State> getTransitionsFromState(const State& from) const;
-	
+
 	/**
 	 * @return automaton transitions to state
 	 */
@@ -85,10 +85,10 @@ public:
 	}
 
 	virtual int compare(const DFA& other) const;
-	
+
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<DFA>();
diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.h b/alib2data/src/automaton/FSM/EpsilonNFA.h
index 28fad8d46e824e98f790fc9a984c088b128f0ef3..807727492d54eeb6650192a2715768bd572080b1 100644
--- a/alib2data/src/automaton/FSM/EpsilonNFA.h
+++ b/alib2data/src/automaton/FSM/EpsilonNFA.h
@@ -166,7 +166,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<EpsilonNFA>();
diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.h b/alib2data/src/automaton/FSM/ExtendedNFA.h
index 16fd38b603b01004c13beedec1791ffa59b6b702..4bd083357319af6e7cf23982c6b3479e491d7f2b 100644
--- a/alib2data/src/automaton/FSM/ExtendedNFA.h
+++ b/alib2data/src/automaton/FSM/ExtendedNFA.h
@@ -89,7 +89,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ExtendedNFA>();
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
index 48bda23aa7bff6ea055df511d52b6ceb11f69f76..1bb49a341e5b448959a5090985ae470d94c15d2b 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
+++ b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
@@ -105,7 +105,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<MultiInitialStateNFA>();
diff --git a/alib2data/src/automaton/FSM/NFA.h b/alib2data/src/automaton/FSM/NFA.h
index 3d4bad88ec3ac086b75e929b0455dd7b1babf716..50c88650e18b891f35edfdff8df2732e44181cd6 100644
--- a/alib2data/src/automaton/FSM/NFA.h
+++ b/alib2data/src/automaton/FSM/NFA.h
@@ -103,7 +103,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<NFA>();
diff --git a/alib2data/src/automaton/PDA/DPDA.h b/alib2data/src/automaton/PDA/DPDA.h
index d7332569ca36e8eb0d0c74f770b1b7d8a293d4e1..534252094a5cfa538e321ac41bca862c1a581243 100644
--- a/alib2data/src/automaton/PDA/DPDA.h
+++ b/alib2data/src/automaton/PDA/DPDA.h
@@ -99,7 +99,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<DPDA>();
diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.h b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
index 4d92e00439550ceab5ca23f053d2f54a4fd729dc..085931f95e353c587a7116b829663770b4ef7880 100644
--- a/alib2data/src/automaton/PDA/InputDrivenDPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
@@ -98,7 +98,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<InputDrivenDPDA>();
diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.h b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
index 75159d0a7c23dca69ebaf660ad13261390564f49..2ba69787a79c478afe16dc1053b9b3975eefff9c 100644
--- a/alib2data/src/automaton/PDA/InputDrivenNPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
@@ -97,7 +97,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<InputDrivenNPDA>();
diff --git a/alib2data/src/automaton/PDA/NPDA.h b/alib2data/src/automaton/PDA/NPDA.h
index 0725489c600f9984f88480301a64e7545a638428..da6e75e17f06aa2b66dc8721099483be2044f3ea 100644
--- a/alib2data/src/automaton/PDA/NPDA.h
+++ b/alib2data/src/automaton/PDA/NPDA.h
@@ -85,7 +85,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<NPDA>();
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
index 64e9ea3ccd6416b5bfe16441aae5b0fdec8afbac..37156ecf5dee8e82880412c749dc38b521a8a4b9 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
@@ -126,7 +126,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<RealTimeHeightDeterministicDPDA>();
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
index 21e85c58d4f9100c5d2e4f1ce22ad824654eb110..4f81eba7af9bfa6c33e7c6f772a558d734768c81 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
@@ -126,7 +126,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<RealTimeHeightDeterministicNPDA>();
diff --git a/alib2data/src/automaton/PDA/SinglePopDPDA.h b/alib2data/src/automaton/PDA/SinglePopDPDA.h
index 3ac5eca2d403e7ad1ca7391b3f59b35d218a150f..f79eb5fdfd43b3cf5c3ae29c1c09bbda9ed164ae 100644
--- a/alib2data/src/automaton/PDA/SinglePopDPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopDPDA.h
@@ -89,7 +89,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<SinglePopDPDA>();
diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.h b/alib2data/src/automaton/PDA/SinglePopNPDA.h
index 9830da0869738b8d0e75810568345b171786359e..4c5b5d386470d6b930f19d633f62bd02d071372d 100644
--- a/alib2data/src/automaton/PDA/SinglePopNPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopNPDA.h
@@ -85,7 +85,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<SinglePopNPDA>();
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
index 0aa8958edbf3c5646ddf0b2fa09bf3213b2041b8..cda77c82af94a7c8067467e6a67d5ea51b0490eb 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
@@ -112,7 +112,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<VisiblyPushdownDPDA>();
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
index 3f22b8c4d26201dd327573ef52703ae415543b13..d6faa402c3924f73a855a776591e8b76d0aec76c 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
@@ -112,7 +112,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<VisiblyPushdownNPDA>();
diff --git a/alib2data/src/automaton/TM/OneTapeDTM.h b/alib2data/src/automaton/TM/OneTapeDTM.h
index 0418689019f1d084bfeb79c032f847b0a7a78fde..9ee3d33169c3fdd2fcf8d7589be82ce3995edc6c 100644
--- a/alib2data/src/automaton/TM/OneTapeDTM.h
+++ b/alib2data/src/automaton/TM/OneTapeDTM.h
@@ -81,7 +81,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<OneTapeDTM>();
diff --git a/alib2data/src/automaton/common/State.h b/alib2data/src/automaton/common/State.h
index 2835b3a556eb1b5644dba5a9f1c7ec82580463b6..c2fc2c8c95e5546ce0dd03c435e3ce3b28792d47 100644
--- a/alib2data/src/automaton/common/State.h
+++ b/alib2data/src/automaton/common/State.h
@@ -39,7 +39,7 @@ public:
 
 	friend std::ostream& operator<<(std::ostream&, const State&);
 
-	operator std::string () const;
+	explicit operator std::string () const;
 };
 
 } /* namespace automaton */
diff --git a/alib2data/src/common/base.hpp b/alib2data/src/common/base.hpp
index e6e86ab01dd4baa57cb66d66b6dabb2579aaf24e..8fa2fcc3304f6a5381e8a557c028745938feb3c4 100644
--- a/alib2data/src/common/base.hpp
+++ b/alib2data/src/common/base.hpp
@@ -109,7 +109,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const = 0;
 
-	virtual operator std::string () const = 0;
+	virtual explicit operator std::string () const = 0;
 };
 
 } /* namespace alib */
diff --git a/alib2data/src/common/wrapper.hpp b/alib2data/src/common/wrapper.hpp
index fb053875c038b6165b7ea67422b0ba647edb7eb7..c0093ba42f6d5a33ae55a37fd070c47d9d175f65 100644
--- a/alib2data/src/common/wrapper.hpp
+++ b/alib2data/src/common/wrapper.hpp
@@ -99,7 +99,7 @@ public:
 		return os;
 	}
 
-	operator std::string () const {
+	explicit operator std::string () const {
 		return (std::string) *data;
 	}
 };
diff --git a/alib2data/src/container/ObjectsMap.h b/alib2data/src/container/ObjectsMap.h
index de194f09378c727f08bf949f395c01650f85a91b..c4d7aa4ca20de4e2a3817a792d7ef9ead5d0ec02 100644
--- a/alib2data/src/container/ObjectsMap.h
+++ b/alib2data/src/container/ObjectsMap.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectsMap>();
diff --git a/alib2data/src/container/ObjectsPair.h b/alib2data/src/container/ObjectsPair.h
index 28bd4a12895ac6d7397409bfa50660d299dbd37e..e6a0dbb77c08671366dca81480615530152ed476 100644
--- a/alib2data/src/container/ObjectsPair.h
+++ b/alib2data/src/container/ObjectsPair.h
@@ -36,7 +36,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectsPair>();
diff --git a/alib2data/src/container/ObjectsSet.h b/alib2data/src/container/ObjectsSet.h
index 4ee7de42c8a712a0bb00693901fa34ddf18d59d5..16747c020c98872f4df8a7187b387f483333a660 100644
--- a/alib2data/src/container/ObjectsSet.h
+++ b/alib2data/src/container/ObjectsSet.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectsSet>();
diff --git a/alib2data/src/container/ObjectsVector.h b/alib2data/src/container/ObjectsVector.h
index ca64be8673a30860a7ab2e0c938eba933e18398c..1c88f62645bf11cfe4c266ad6e6696bab95c174a 100644
--- a/alib2data/src/container/ObjectsVector.h
+++ b/alib2data/src/container/ObjectsVector.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectsVector>();
diff --git a/alib2data/src/exception/AlibException.h b/alib2data/src/exception/AlibException.h
index 7feee65081eefeba4bbfb31adf549dde44001881..7b3007ac43bb8a7d05764868c8670eede1ab1c37 100644
--- a/alib2data/src/exception/AlibException.h
+++ b/alib2data/src/exception/AlibException.h
@@ -61,7 +61,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<AlibException>();
diff --git a/alib2data/src/grammar/ContextFree/CFG.h b/alib2data/src/grammar/ContextFree/CFG.h
index f995b96a6a237033713ed1988312de1f7628438b..a9611d56f50683a510cd190ca373446ee4d7d27a 100644
--- a/alib2data/src/grammar/ContextFree/CFG.h
+++ b/alib2data/src/grammar/ContextFree/CFG.h
@@ -55,7 +55,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<CFG>();
diff --git a/alib2data/src/grammar/ContextFree/CNF.h b/alib2data/src/grammar/ContextFree/CNF.h
index 5e1ddfa9333f584ca1128a50de04b4a7829af9b2..2f807a66590a295d459c2f8f4d5217436426b9d0 100644
--- a/alib2data/src/grammar/ContextFree/CNF.h
+++ b/alib2data/src/grammar/ContextFree/CNF.h
@@ -64,7 +64,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<CNF>();
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
index a5382fadb1b62c0d57f192f57a579b3a50340cda..6166994faa7ba5cd5273edbc773cd4158eb2202a 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
@@ -59,7 +59,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<EpsilonFreeCFG>();
diff --git a/alib2data/src/grammar/ContextFree/GNF.h b/alib2data/src/grammar/ContextFree/GNF.h
index 08b12ff8a65a63e04ec41a063c3d92db568ae440..6806ea3c985d8833affb61d56b95124c09e135d0 100644
--- a/alib2data/src/grammar/ContextFree/GNF.h
+++ b/alib2data/src/grammar/ContextFree/GNF.h
@@ -59,7 +59,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<GNF>();
diff --git a/alib2data/src/grammar/ContextFree/LG.h b/alib2data/src/grammar/ContextFree/LG.h
index 322bac4bec052c8eed9fee578cde2539d7cb45c3..0f5fd6fd39e9759cb1d378b7dcd41926af43e3af 100644
--- a/alib2data/src/grammar/ContextFree/LG.h
+++ b/alib2data/src/grammar/ContextFree/LG.h
@@ -60,7 +60,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LG>();
diff --git a/alib2data/src/grammar/ContextSensitive/CSG.h b/alib2data/src/grammar/ContextSensitive/CSG.h
index e4baa92f6888e9dab03192d4a9e8e7c1b80f5412..52b5b20735fec6cffb6fad2a6a8653e5d0656542 100644
--- a/alib2data/src/grammar/ContextSensitive/CSG.h
+++ b/alib2data/src/grammar/ContextSensitive/CSG.h
@@ -52,7 +52,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<CSG>();
diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
index 37e32edd57d9c954180f5b4660e04b73accfd3e2..66f957e5f4a3729571daf4dbc0f75c7f752b0a6e 100644
--- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
+++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
@@ -52,7 +52,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<NonContractingGrammar>();
diff --git a/alib2data/src/grammar/Regular/LeftLG.h b/alib2data/src/grammar/Regular/LeftLG.h
index 1c662378e814be864c4eb2a3023794f179f1e473..6998aca04c5807b95e7fa4843766ebc70d944697 100644
--- a/alib2data/src/grammar/Regular/LeftLG.h
+++ b/alib2data/src/grammar/Regular/LeftLG.h
@@ -59,7 +59,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LeftLG>();
diff --git a/alib2data/src/grammar/Regular/LeftRG.h b/alib2data/src/grammar/Regular/LeftRG.h
index de7ddb40c6800d45a056762729c05be042b3c141..12d46b2b2c92935d625e1b34f52adb59edac9f84 100644
--- a/alib2data/src/grammar/Regular/LeftRG.h
+++ b/alib2data/src/grammar/Regular/LeftRG.h
@@ -143,7 +143,7 @@ public:
 	/**
 	 * casts this instance to as compact as possible string representation
 	 */
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	/**
 	 * @copydoc alib::base_base::selfTypeId
diff --git a/alib2data/src/grammar/Regular/RightLG.h b/alib2data/src/grammar/Regular/RightLG.h
index cef83c1fb4c36a7b6642cc51323ba2b55f804fdd..35ca0cdca0e44045d1b4b862f3425382f1464ded 100644
--- a/alib2data/src/grammar/Regular/RightLG.h
+++ b/alib2data/src/grammar/Regular/RightLG.h
@@ -59,7 +59,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<RightLG>();
diff --git a/alib2data/src/grammar/Regular/RightRG.h b/alib2data/src/grammar/Regular/RightRG.h
index d28cc62c79b09029850b6a5f8c64e64d5f67563c..de21f7c2d79226002fcc9069dfb6862f4f3a0bd4 100644
--- a/alib2data/src/grammar/Regular/RightRG.h
+++ b/alib2data/src/grammar/Regular/RightRG.h
@@ -79,7 +79,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<RightRG>();
diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
index 4de7f9fd185d5f74515ab9b3948c5add224c7956..2668aa83de037cc3413ea731d710ad7e58e535aa 100644
--- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
@@ -48,7 +48,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<ContextPreservingUnrestrictedGrammar>();
diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
index bb776833557497d2d04ca3d94b85bd0fe7b6d3cd..55761fd07e117c478060aa026922b7845b563620 100644
--- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
@@ -48,7 +48,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnrestrictedGrammar>();
diff --git a/alib2data/src/graph/common/Node.h b/alib2data/src/graph/common/Node.h
index 93fe69b1d8c089c5159c05cf4445e681f053fc5d..3016a938fa4679334262ea1a1d7fbde9cce8b2ce 100644
--- a/alib2data/src/graph/common/Node.h
+++ b/alib2data/src/graph/common/Node.h
@@ -36,7 +36,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/graph/directed/DirectedEdge.h b/alib2data/src/graph/directed/DirectedEdge.h
index 65d773d72b539a40225e35838b327178c6f03032..75b1a346023293d4af09c6d9d66756aeccf9b7dd 100644
--- a/alib2data/src/graph/directed/DirectedEdge.h
+++ b/alib2data/src/graph/directed/DirectedEdge.h
@@ -43,7 +43,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/graph/directed/DirectedGraph.h b/alib2data/src/graph/directed/DirectedGraph.h
index 5aa24d57037e10b397dc4f0f42b427785a8eb883..dc6ff344e6d16a96ad0c53c1ecd5f911b6058c82 100644
--- a/alib2data/src/graph/directed/DirectedGraph.h
+++ b/alib2data/src/graph/directed/DirectedGraph.h
@@ -64,7 +64,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/graph/directed/IDirectedGraph.h b/alib2data/src/graph/directed/IDirectedGraph.h
index 163c376b0b61ca046e3020d3830b96595f7dcec0..6e8145b2b5270de7389cae0f030e79a06471e1ab 100644
--- a/alib2data/src/graph/directed/IDirectedGraph.h
+++ b/alib2data/src/graph/directed/IDirectedGraph.h
@@ -34,7 +34,7 @@ public:
 	virtual void copy(IDirectedGraph *other) = 0;
 	virtual int compare(IDirectedGraph *other) const = 0;
 
-	operator std::string() const;
+	explicit operator std::string() const;
 };
 
 } // namespace graph
diff --git a/alib2data/src/graph/undirected/IUndirectedGraph.h b/alib2data/src/graph/undirected/IUndirectedGraph.h
index 3e0ad5aacc23c201ba2ff71579aefc48ec9f86d5..c3d70d87a46c5045a6bfef5c65ffac390070726d 100644
--- a/alib2data/src/graph/undirected/IUndirectedGraph.h
+++ b/alib2data/src/graph/undirected/IUndirectedGraph.h
@@ -34,7 +34,7 @@ public:
 	virtual void copy(IUndirectedGraph *other) = 0;
 	virtual int compare(IUndirectedGraph *other) const = 0;
 
-	operator std::string() const;
+	explicit operator std::string() const;
 };
 
 } // namespace graph
diff --git a/alib2data/src/graph/undirected/UndirectedEdge.h b/alib2data/src/graph/undirected/UndirectedEdge.h
index 379300e591de7f10112fef09ed9dedff5d48e3f2..b8c1b846ab1c178577b53fbb163a61b09756e055 100644
--- a/alib2data/src/graph/undirected/UndirectedEdge.h
+++ b/alib2data/src/graph/undirected/UndirectedEdge.h
@@ -43,7 +43,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/graph/undirected/UndirectedGraph.h b/alib2data/src/graph/undirected/UndirectedGraph.h
index 0fc7dad5f07921653342426c61bcf69aa97c928e..b99bdb086b3ceecc64b653c4330543fbddf292e9 100644
--- a/alib2data/src/graph/undirected/UndirectedGraph.h
+++ b/alib2data/src/graph/undirected/UndirectedGraph.h
@@ -64,7 +64,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/label/HexavigesimalLabel.h b/alib2data/src/label/HexavigesimalLabel.h
index 465524b3c12ba0b1b779ff40d70cf01deb5a4964..4f805ba06256442fd2bf0e3312356931f17f00ac 100644
--- a/alib2data/src/label/HexavigesimalLabel.h
+++ b/alib2data/src/label/HexavigesimalLabel.h
@@ -46,7 +46,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<HexavigesimalLabel>();
diff --git a/alib2data/src/label/LabelPairLabel.h b/alib2data/src/label/LabelPairLabel.h
index 0c01b4228e54172ed188ad37d3e9d3983b0c45f5..bc72f9194676561b9e7db3b3d93a19819d7eb9a9 100644
--- a/alib2data/src/label/LabelPairLabel.h
+++ b/alib2data/src/label/LabelPairLabel.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LabelPairLabel>();
diff --git a/alib2data/src/label/LabelSetLabel.h b/alib2data/src/label/LabelSetLabel.h
index f9e393ef6b29e5be60db778bd9df24e0c55b5c90..2741e2dd803657b364cd862337f28e3700195e3c 100644
--- a/alib2data/src/label/LabelSetLabel.h
+++ b/alib2data/src/label/LabelSetLabel.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LabelSetLabel>();
diff --git a/alib2data/src/label/ObjectLabel.h b/alib2data/src/label/ObjectLabel.h
index b435aeda59f6ce16d2c159f925d77d338e79705b..37d27086f0e13b8bd1132118e1de86cb314a6d0c 100644
--- a/alib2data/src/label/ObjectLabel.h
+++ b/alib2data/src/label/ObjectLabel.h
@@ -48,7 +48,7 @@ public:
 	
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectLabel>();
diff --git a/alib2data/src/label/PrimitiveLabel.h b/alib2data/src/label/PrimitiveLabel.h
index b783b066986e9480cb6a587292dd60d54307fdf8..f8f572a2699d8f0626a22fdde61502289413b79e 100644
--- a/alib2data/src/label/PrimitiveLabel.h
+++ b/alib2data/src/label/PrimitiveLabel.h
@@ -48,7 +48,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<PrimitiveLabel>();
diff --git a/alib2data/src/label/UniqueLabel.h b/alib2data/src/label/UniqueLabel.h
index 872f49a94ff37a487d92f74c0c18bcdf577a74ab..3b89b2c08010ad7cbe8e84d3634b785c7a587264 100644
--- a/alib2data/src/label/UniqueLabel.h
+++ b/alib2data/src/label/UniqueLabel.h
@@ -52,7 +52,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<UniqueLabel>();
diff --git a/alib2data/src/object/Void.h b/alib2data/src/object/Void.h
index 6c2eedcb35f2a034edfeaae19ed314afac018b6d..bd1fa9f57ac99bce6d545baf494a9c2f642e3f23 100644
--- a/alib2data/src/object/Void.h
+++ b/alib2data/src/object/Void.h
@@ -36,7 +36,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<Void>();
diff --git a/alib2data/src/primitive/Bool.h b/alib2data/src/primitive/Bool.h
index c3dee8ace3663d895f20301cd8eb9cc2fe6962e5..9561862a090326872ffd7891d418a02805a1da6c 100644
--- a/alib2data/src/primitive/Bool.h
+++ b/alib2data/src/primitive/Bool.h
@@ -45,7 +45,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<Bool>();
diff --git a/alib2data/src/primitive/Character.h b/alib2data/src/primitive/Character.h
index 842a21a4f54387772dbf7ca0af8df59323e5574f..13aba2a13dc3972f10ea492a10425e658f6ac3bd 100644
--- a/alib2data/src/primitive/Character.h
+++ b/alib2data/src/primitive/Character.h
@@ -46,7 +46,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<Character>();
diff --git a/alib2data/src/primitive/Integer.h b/alib2data/src/primitive/Integer.h
index 88ee421be0bea1446f46b6b68692997ac1fded24..47c01dfdf18c2cec0489571a933fa6131605563d 100644
--- a/alib2data/src/primitive/Integer.h
+++ b/alib2data/src/primitive/Integer.h
@@ -45,7 +45,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<Integer>();
diff --git a/alib2data/src/primitive/String.h b/alib2data/src/primitive/String.h
index 0ceb083f34a3edd385b45ab1e8d9b21d4cb6c1f0..48358e88f764a20a1f1e8cefd3b1d6ed14eda15c 100644
--- a/alib2data/src/primitive/String.h
+++ b/alib2data/src/primitive/String.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<String>();
diff --git a/alib2data/src/primitive/Unsigned.h b/alib2data/src/primitive/Unsigned.h
index a6a11d6ad08f68d1b71065c8fd42823213dad1ac..faa651f14fa0c2742c458868ac3466f60a123aeb 100644
--- a/alib2data/src/primitive/Unsigned.h
+++ b/alib2data/src/primitive/Unsigned.h
@@ -45,7 +45,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<Unsigned>();
diff --git a/alib2data/src/regexp/formal/FormalRegExp.h b/alib2data/src/regexp/formal/FormalRegExp.h
index f8d705d9f61978ac86ccdbfd6899d965a96ce6f8..3f986b0ffcf7295d1b91fd3221d8c58ac69de91d 100644
--- a/alib2data/src/regexp/formal/FormalRegExp.h
+++ b/alib2data/src/regexp/formal/FormalRegExp.h
@@ -99,7 +99,7 @@ public:
 
 	virtual int compare(const FormalRegExp& other) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExp>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpAlternation.h b/alib2data/src/regexp/formal/FormalRegExpAlternation.h
index b31853b98f6f0e7a4817d65a7ecafb05fb02821e..d2a90b6ecb3ec856afe6dff52cb3d1ae8ac3ab15 100644
--- a/alib2data/src/regexp/formal/FormalRegExpAlternation.h
+++ b/alib2data/src/regexp/formal/FormalRegExpAlternation.h
@@ -105,7 +105,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpAlternation>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpConcatenation.h b/alib2data/src/regexp/formal/FormalRegExpConcatenation.h
index 0b53a274e71c2aaa003cdebe77edf00b800d521e..c64d9c9d8868da7c3df9dacbd6f6c7c123a6eb13 100644
--- a/alib2data/src/regexp/formal/FormalRegExpConcatenation.h
+++ b/alib2data/src/regexp/formal/FormalRegExpConcatenation.h
@@ -103,7 +103,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpConcatenation>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpEmpty.h b/alib2data/src/regexp/formal/FormalRegExpEmpty.h
index f4825479d51c420625bd96bba20b53a89f333ff8..62d91438d7a0fcd1fa8337bcde2ac0156a656bc4 100644
--- a/alib2data/src/regexp/formal/FormalRegExpEmpty.h
+++ b/alib2data/src/regexp/formal/FormalRegExpEmpty.h
@@ -66,7 +66,7 @@ public:
 	 */
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpEmpty>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpEpsilon.h b/alib2data/src/regexp/formal/FormalRegExpEpsilon.h
index 72c32e5afbd1f38928f8beb39264b5b5ef467535..bc91013adc09ae485ad4998dba1bdfa10d521e16 100644
--- a/alib2data/src/regexp/formal/FormalRegExpEpsilon.h
+++ b/alib2data/src/regexp/formal/FormalRegExpEpsilon.h
@@ -67,7 +67,7 @@ public:
 	 */
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpEpsilon>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpIteration.h b/alib2data/src/regexp/formal/FormalRegExpIteration.h
index ccd265a4b8803822a5aa6e85563733fd8a4e21ee..6a1e1d42f6577724829d7f92b59fbb5caa5a3490 100644
--- a/alib2data/src/regexp/formal/FormalRegExpIteration.h
+++ b/alib2data/src/regexp/formal/FormalRegExpIteration.h
@@ -98,7 +98,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpIteration>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpSymbol.h b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
index f5046071791cda34bcf2b23788a352bf1b086968..3a7cd16d79b7c5f64a1c80d616096ab44e96af09 100644
--- a/alib2data/src/regexp/formal/FormalRegExpSymbol.h
+++ b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
@@ -83,7 +83,7 @@ public:
 	 */
 	const alphabet::Symbol& getSymbol() const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpSymbol>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExp.h b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
index 82f551be2f7699bc99e6a27c58b12770c3155ba4..3d2e654d31936a50c9e14f52a56b44b2986c1324 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExp.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
@@ -99,7 +99,7 @@ public:
 
 	virtual int compare(const UnboundedRegExp& other) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExp>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h b/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h
index f2c2faf69bcfd5364a2295ec0906dbb1e5f5f66f..c250ab5247a2b9d5a07b713c64e922fcfb368de4 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h
@@ -99,7 +99,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpAlternation>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h b/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h
index bee29e7164e8e14063847601c22aab9bb317e653..b3b7031ad2fb7a491f1066f084d9f4baaa4c6793 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h
@@ -98,7 +98,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpConcatenation>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h b/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h
index d978c92b909b8fbf40fd5e7816893f0a5d29b00d..eee6cccbe171767795de1bbfe6b4bda42490bd0c 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h
@@ -65,7 +65,7 @@ public:
 	 */
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpEmpty>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h b/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h
index ef72a8d2b329e1da1fcdaff19b37a70d5590cff6..fe478f502e1e54e06bc4470a7fab4669f3a85e63 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h
@@ -66,7 +66,7 @@ public:
 	 */
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpEpsilon>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h b/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h
index 1c37dd47548ee4f413025e9dd5cfe28b5d29acc0..3fd2cff71210397ec90400264bdf3cf7359724ea 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h
@@ -97,7 +97,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpIteration>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
index b567b01d04c6ca821a38212f01b6bfa193f82f65..e5bb25efdea85b561a0fddc1898d7069c897542e 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
@@ -82,7 +82,7 @@ public:
 	 */
 	const alphabet::Symbol& getSymbol() const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpSymbol>();
diff --git a/alib2data/src/sax/Token.h b/alib2data/src/sax/Token.h
index 836b652806fac2bfa4d5a174a87a8ea733f32d4b..dba8b50f7e3b991e179c29651400678b192d203d 100644
--- a/alib2data/src/sax/Token.h
+++ b/alib2data/src/sax/Token.h
@@ -47,7 +47,7 @@ public:
 
 	friend std::ostream& operator<<(std::ostream& os, const Token& token);
 
-	operator std::string () const;
+	explicit operator std::string () const;
 };
 
 } /* namespace sax */
diff --git a/alib2data/src/std/variant.hpp b/alib2data/src/std/variant.hpp
index 7a6dc3bc10dce7aae7316db6f3ef69e4db88bbda..7ffc7220636c305ab96b69a4ceeef3134e15fe28 100644
--- a/alib2data/src/std/variant.hpp
+++ b/alib2data/src/std/variant.hpp
@@ -248,7 +248,7 @@ public:
 		return out;
 	}
 
-	operator std::string() const {
+	explicit operator std::string() const {
 		return helper_t::string(this->type_id, &this->data);
 	}
 };
diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h
index b45a41ba9ab7eea5e6d8edc62b09b402cfa7d477..c97a433e259e5c39113eb53cecd35529c7e31fa6 100644
--- a/alib2data/src/string/CyclicString.h
+++ b/alib2data/src/string/CyclicString.h
@@ -63,7 +63,7 @@ public:
 
 	virtual void operator >>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<CyclicString>();
diff --git a/alib2data/src/string/Epsilon.h b/alib2data/src/string/Epsilon.h
index e25f4806b6b557f1d9cd8f6f13ad9cc273f84f50..30621a85c060c05ef8b217d46d512cb890089563 100644
--- a/alib2data/src/string/Epsilon.h
+++ b/alib2data/src/string/Epsilon.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator >>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	static Epsilon EPSILON;
 
diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h
index 05da8ee3d550f4f511f41c828529dc8146c76d53..13675e888728e22eb2dfc5ba94f916aa30cd259f 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -71,7 +71,7 @@ public:
 
 	virtual void operator >>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<LinearString>();