diff --git a/alib2data/src/string/CyclicString.cpp b/alib2data/src/string/CyclicString.cpp
index 0985c6c2f34f088418710d0e7e940642dd2a265c..7c7533a55bfc08869ae0137c7ee7bf1408c12116 100644
--- a/alib2data/src/string/CyclicString.cpp
+++ b/alib2data/src/string/CyclicString.cpp
@@ -154,8 +154,15 @@ void CyclicString::operator >>(std::ostream& out) const {
 
 CyclicString::operator std::string () const {
 	std::stringstream ss;
-	ss << *this;
-	return ss.str(); 
+	if( this->isEmpty() ) {
+		ss << "E";
+	} else {
+		ss << "<";
+		for(const alphabet::Symbol& symbol : this->m_Data)
+			ss << (std::string) symbol;
+		ss << ">";
+	}
+	return std::move(ss).str();
 }
 
 } /* namespace string */
diff --git a/alib2data/src/string/Epsilon.cpp b/alib2data/src/string/Epsilon.cpp
index 9fd1af518c0f1e3b017c895685c006ec4f4bca35..954afcc1b94d366a918412b0335cc4753fa502ec 100644
--- a/alib2data/src/string/Epsilon.cpp
+++ b/alib2data/src/string/Epsilon.cpp
@@ -90,9 +90,7 @@ void Epsilon::operator>>(std::ostream& out) const {
 }
 
 Epsilon::operator std::string() const {
-	std::stringstream ss;
-	ss << *this;
-	return ss.str();
+	return "E";
 }
 
 Epsilon Epsilon::EPSILON = Epsilon();
diff --git a/alib2data/src/string/LinearString.cpp b/alib2data/src/string/LinearString.cpp
index 989e0cf81ed7f30e7e2223ef3188ee32efce0572..155407c1a6eae0b1e1f99633a05db528695a0a8b 100644
--- a/alib2data/src/string/LinearString.cpp
+++ b/alib2data/src/string/LinearString.cpp
@@ -166,8 +166,15 @@ void LinearString::operator >>(std::ostream& out) const {
 
 LinearString::operator std::string () const {
 	std::stringstream ss;
-	ss << *this;
-	return ss.str(); 
+	if( this->isEmpty() ) {
+		ss << "E";
+	} else {
+		ss << "\"";
+		for(const alphabet::Symbol& symbol : this->m_Data)
+			ss << (std::string) symbol;
+		ss << "\"";
+	}
+	return std::move(ss).str();
 }
 
 } /* namespace string */
diff --git a/alib2data/src/string/StringBase.cpp b/alib2data/src/string/StringBase.cpp
index c9c36fe78790598b1d81cec32c9ca40c56f6fdeb..de34c74167d00c63335d6822ce99700fdebe4e98 100644
--- a/alib2data/src/string/StringBase.cpp
+++ b/alib2data/src/string/StringBase.cpp
@@ -19,6 +19,14 @@ StringBase::~StringBase() noexcept {
 
 }
 
+bool StringBase::operator>=(const StringBase& other) const {
+	return !(*this < other);
+}
+
+bool StringBase::operator<=(const StringBase& other) const {
+	return !(*this > other);
+}
+
 bool StringBase::operator !=(const StringBase& other) const {
 	return !(*this == other);
 }
diff --git a/alib2data/src/string/StringBase.h b/alib2data/src/string/StringBase.h
index d998caba35b1433ea493d18c8ba404d277332631..fc8edb5e453296b9de44a52402bc46aaef276118 100644
--- a/alib2data/src/string/StringBase.h
+++ b/alib2data/src/string/StringBase.h
@@ -30,19 +30,22 @@ public:
 	virtual StringBase* clone() const = 0;
 	virtual StringBase* plunder() && = 0; 
 
-	virtual bool operator <(const StringBase& other) const = 0;
-	virtual bool operator ==(const StringBase& other) const = 0;
-	virtual bool operator >(const StringBase& other) const = 0;
+	bool operator>=(const StringBase& other) const;
+
+	bool operator<=(const StringBase& other) const;
+
 	bool operator !=(const StringBase& other) const;
 
+	virtual bool operator==(const StringBase& other) const = 0;
 	virtual bool operator==(const LinearString& other) const = 0;
 	virtual bool operator==(const CyclicString& other) const = 0;
 	virtual bool operator==(const Epsilon& other) const = 0;
 
+	virtual bool operator<(const StringBase& other) const = 0;
 	virtual bool operator<(const LinearString& other) const = 0;
 	virtual bool operator<(const CyclicString& other) const = 0;
 	virtual bool operator<(const Epsilon& other) const = 0;
-
+	virtual bool operator>(const StringBase& other) const = 0;
 
 	/**
 	 * Prints XML representation of the String to the output stream.