diff --git a/alib2/src/alphabet/SymbolFromStringLexer.cpp b/alib2/src/alphabet/SymbolFromStringLexer.cpp
index d95336efb64de16bb2120f273c4b90f347a88605..281064ae2ad4222ab813858b95ed40afc066c67c 100644
--- a/alib2/src/alphabet/SymbolFromStringLexer.cpp
+++ b/alib2/src/alphabet/SymbolFromStringLexer.cpp
@@ -12,8 +12,8 @@ SymbolFromStringLexer& SymbolFromStringLexer::next() {
 	char character;
 	m_Current.value = "";
 
-L0:
 	std::streampos pos = m_In.tellg();
+L0:
 	character = m_In.get();
 	if(m_In.eof()) {
 		m_In.seekg(pos);
diff --git a/alib2/src/label/LabelFromStringLexer.cpp b/alib2/src/label/LabelFromStringLexer.cpp
index 7ee00a3d7d1d7c9c44fa3592e3b13034c4d3787e..f4e25929eec912b5a4789caef5b37c71794a41be 100644
--- a/alib2/src/label/LabelFromStringLexer.cpp
+++ b/alib2/src/label/LabelFromStringLexer.cpp
@@ -11,8 +11,8 @@ LabelFromStringLexer& LabelFromStringLexer::next() {
 	char character;
 	m_Current.value = "";
 
-L0:
 	std::streampos pos = m_In.tellg();
+L0:
 	character = m_In.get();
 	if(m_In.eof()) {
 		m_In.seekg(pos);
diff --git a/alib2/src/string/StringFromStringLexer.cpp b/alib2/src/string/StringFromStringLexer.cpp
index 79874cd89be15123abe05ecd97d18e018c3444c4..2e1a32a806182014b02e99987641b87e8e362b86 100644
--- a/alib2/src/string/StringFromStringLexer.cpp
+++ b/alib2/src/string/StringFromStringLexer.cpp
@@ -11,9 +11,11 @@ StringFromStringLexer& StringFromStringLexer::next() {
 	char character;
 	m_Current.value = "";
 
+	std::streampos pos = m_In.tellg();
 L0:
 	character = m_In.get();
 	if(m_In.eof()) {
+		m_In.seekg(pos);
 		m_Current.type = TokenType::TEOF;
 		return *this;
 	} else if(character == ' ' || character == '\n' || character == '\t') {
@@ -30,8 +32,24 @@ L0:
 		m_Current.type = TokenType::QUOTE;
 		m_Current.value += character;
 		return *this;
+	} else if(character == '#') {
+		goto L1;
 	} else {
-		m_In.unget();
+		m_In.seekg(pos);
+		m_Current.type = TokenType::ERROR;
+		return *this;
+	}
+L1:
+	character = m_In.get();
+	if(m_In.eof()) {
+		m_In.seekg(pos);
+		m_Current.type = TokenType::ERROR;
+		return *this;
+	} else if(character == 'E') {
+		m_Current.type = TokenType::EPSILON;
+		return *this;
+	} else {
+		m_In.seekg(pos);
 		m_Current.type = TokenType::ERROR;
 		return *this;
 	}
diff --git a/alib2/src/string/StringFromStringLexer.h b/alib2/src/string/StringFromStringLexer.h
index 3c6b195ae23e1188d76c1781ac870fc4719fbdcc..ef501e38bde693d152f23ffe5d835d717dfd7b4c 100644
--- a/alib2/src/string/StringFromStringLexer.h
+++ b/alib2/src/string/StringFromStringLexer.h
@@ -13,6 +13,7 @@ public:
 		LESS,
 		GREATER,
 		QUOTE,
+		EPSILON,
 		TEOF,
 		ERROR
 	};
diff --git a/alib2/src/string/StringFromStringParser.cpp b/alib2/src/string/StringFromStringParser.cpp
index 22916c3320660e3a92828d454812c5072426a100..086d95c757e3b2444dcab48fd65e8c32941d8aea 100644
--- a/alib2/src/string/StringFromStringParser.cpp
+++ b/alib2/src/string/StringFromStringParser.cpp
@@ -15,7 +15,7 @@ StringFromStringParser::StringFromStringParser(std::stringstream& input) : m_Str
 
 String* StringFromStringParser::parse() {
 	StringFromStringLexer::Token token = m_StringLexer.next().token();
-	if(token.type == StringFromStringLexer::TokenType::TEOF) {
+	if(token.type == StringFromStringLexer::TokenType::EPSILON) {
 		return new String(Epsilon());
 	} else if(token.type == StringFromStringLexer::TokenType::LESS) {
 		std::vector<alphabet::Symbol> data = parseContent();
diff --git a/alib2/src/string/StringToStringComposer.cpp b/alib2/src/string/StringToStringComposer.cpp
index 6952e9ee9213f1e6a60a5962eb8577fba1409ddf..e8fffe4e7d004afb18c47aedda0a0b8abd627c6c 100644
--- a/alib2/src/string/StringToStringComposer.cpp
+++ b/alib2/src/string/StringToStringComposer.cpp
@@ -39,7 +39,7 @@ void StringToStringComposer::Visit(void* userData, const LinearString& string) {
 void StringToStringComposer::Visit(void* userData, const Epsilon&) {
 	std::stringstream &out = *((std::stringstream*) userData);
 
-	out << "\"\"";
+	out << "#E";
 }
 
 void StringToStringComposer::Visit(void* userData, const String& string) {
diff --git a/alib2/test-src/string/StringTest.cpp b/alib2/test-src/string/StringTest.cpp
index 401255b08809290f52d80a47adac1623f812225a..04258fcb9cc6fe6716024954806ffc0a695e9fc7 100644
--- a/alib2/test-src/string/StringTest.cpp
+++ b/alib2/test-src/string/StringTest.cpp
@@ -48,22 +48,60 @@ void StringTest::testCopyConstruct() {
 }
 
 void StringTest::testEqual() {
-  std::string input = "\"aa\"";
-  std::stringstream inputs(input);
+  {
+    std::string input = "\"aa\"";
+    std::stringstream inputs(input);
 
-  string::StringFromStringParser parser(inputs);
-  string::String string = parser.parseString();
+    string::StringFromStringParser parser(inputs);
+    string::String string = parser.parseString();
 
-  string::StringToStringComposer composer;
-  std::string output = composer.compose(string);
-  std::stringstream outputs(output);
-  
-  CPPUNIT_ASSERT( input == output );
-  
-  string::StringFromStringParser parser2(outputs);
-  string::String string2 = parser2.parseString();
-  
-  CPPUNIT_ASSERT( string == string2 );
+    string::StringToStringComposer composer;
+    std::string output = composer.compose(string);
+    std::stringstream outputs(output);
+
+    CPPUNIT_ASSERT( input == output );
+
+    string::StringFromStringParser parser2(outputs);
+    string::String string2 = parser2.parseString();
+
+    CPPUNIT_ASSERT( string == string2 );
+  }
+  {
+    std::string input = "\"'aaaa''aaa'\"";
+    std::stringstream inputs(input);
+
+    string::StringFromStringParser parser(inputs);
+    string::String string = parser.parseString();
+
+    string::StringToStringComposer composer;
+    std::string output = composer.compose(string);
+    std::stringstream outputs(output);
+
+    CPPUNIT_ASSERT( input == output );
+
+    string::StringFromStringParser parser2(outputs);
+    string::String string2 = parser2.parseString();
+
+    CPPUNIT_ASSERT( string == string2 );
+  }
+  {
+    std::string input = "#E";
+    std::stringstream inputs(input);
+
+    string::StringFromStringParser parser(inputs);
+    string::String string = parser.parseString();
+
+    string::StringToStringComposer composer;
+    std::string output = composer.compose(string);
+    std::stringstream outputs(output);
+
+    CPPUNIT_ASSERT( input == output );
+
+    string::StringFromStringParser parser2(outputs);
+    string::String string2 = parser2.parseString();
+
+    CPPUNIT_ASSERT( string == string2 );
+  }
 }
 
 void StringTest::testXMLParser() {