diff --git a/alib/src/regexp/RegExp.cpp b/alib/src/regexp/RegExp.cpp
index 621b00415264f179667d187fc98a9a04465a82b1..2200f3999faf593907834c41f67a985f834aa29a 100644
--- a/alib/src/regexp/RegExp.cpp
+++ b/alib/src/regexp/RegExp.cpp
@@ -81,11 +81,11 @@ bool RegExp::containsEmptyString() const {
 	return false;
 }
 
-void RegExp::toXML(ostream& out) {
+void RegExp::toXML(ostream& out) const {
 	RegExpPrinter::toXML(*this, out);
 }
 
-ostream& operator <<(ostream& out, RegExp& regexp) {
+ostream& operator <<(ostream& out, const RegExp& regexp) {
 	regexp.toXML(out);
 	return out;
 }
diff --git a/alib/src/regexp/RegExp.h b/alib/src/regexp/RegExp.h
index f16133cc5fa38305e2701f569705de2b5fca3317..9f6e62484221f68dd9c5f9be6787aff70df18596 100644
--- a/alib/src/regexp/RegExp.h
+++ b/alib/src/regexp/RegExp.h
@@ -69,14 +69,14 @@ public:
 	 * Prints XML representation of the RegExp to the output stream.
 	 * @param out output stream to which print the RegExp
 	 */
-	void toXML(ostream& out);
+	void toXML(ostream& out) const;
 
 	/**
 	 * Prints XML representation of the RegExp to the output stream.
 	 * @param out output stream to which print the RegExp
 	 * @param regexp RegExp to print
 	 */
-	friend ostream& operator<<(ostream& out, RegExp& regexp);
+	friend ostream& operator<<(ostream& out, const RegExp& regexp);
 
 	bool operator<(const RegExp&) const;
 	bool operator<=(const RegExp&) const;
diff --git a/alib/src/regexp/RegExpPrinter.cpp b/alib/src/regexp/RegExpPrinter.cpp
index 223ab546911f2e457c2a9f3558d7cc2da972c8b3..5c9afdc77fe63f34aa2e43e6ee3377648facf1a1 100644
--- a/alib/src/regexp/RegExpPrinter.cpp
+++ b/alib/src/regexp/RegExpPrinter.cpp
@@ -11,44 +11,44 @@ namespace regexp {
 
 const string RegExpPrinter::INDENTATION = "\t";
 
-void RegExpPrinter::toXML(RegExp& regexp, ostream& out) {
+void RegExpPrinter::toXML(const RegExp& regexp, ostream& out) {
 	out << "<regexp>\n";
 	printElement(regexp.getRegExp(), out, INDENTATION);
 	out << "</regexp>\n";
 }
 
-void RegExpPrinter::printElement(RegExpElement* element, ostream& out, string prefix) {
-	Alternation* alternation = dynamic_cast<Alternation*>(element);
+void RegExpPrinter::printElement(const RegExpElement* element, ostream& out, const string & prefix) {
+	const Alternation* alternation = dynamic_cast<const Alternation*>(element);
 	if (alternation) {
 		printAlternation(alternation, out, prefix);
 		return;
 	}
 
-	Concatenation* concatenation = dynamic_cast<Concatenation*>(element);
+	const Concatenation* concatenation = dynamic_cast<const Concatenation*>(element);
 	if(concatenation) {
 		printConcatenation(concatenation,out, prefix);
 		return;
 	}
 
-	Iteration* iteration = dynamic_cast<Iteration*>(element);
+	const Iteration* iteration = dynamic_cast<const Iteration*>(element);
 	if (iteration) {
 		printIteration(iteration, out, prefix);
 		return;
 	}
 
-	RegExpEpsilon* epsilon = dynamic_cast<RegExpEpsilon*>(element);
+	const RegExpEpsilon* epsilon = dynamic_cast<const RegExpEpsilon*>(element);
 	if (epsilon) {
 		printEpsilon(epsilon, out, prefix);
 		return;
 	}
 
-	RegExpEmpty* empty = dynamic_cast<RegExpEmpty*>(element);
+	const RegExpEmpty* empty = dynamic_cast<const RegExpEmpty*>(element);
 	if (empty) {
 		printEmpty(empty, out, prefix);
 		return;
 	}
 
-	RegExpSymbol* symbol = dynamic_cast<RegExpSymbol*>(element);
+	const RegExpSymbol* symbol = dynamic_cast<const RegExpSymbol*>(element);
 	if (symbol) {
 		printSymbol(symbol, out, prefix);
 		return;
@@ -56,43 +56,43 @@ void RegExpPrinter::printElement(RegExpElement* element, ostream& out, string pr
 
 }
 
-void RegExpPrinter::printContent(list<RegExpElement*>& content, ostream& out, string prefix) {
+void RegExpPrinter::printContent(const list<RegExpElement*>& content, ostream& out, const string & prefix) {
 	for (auto element : content) {
 		printElement(element, out, prefix);
 	}
 }
 
-void RegExpPrinter::printAlternation(Alternation* alternation, ostream& out, string prefix) {
+void RegExpPrinter::printAlternation(const Alternation* alternation, ostream& out, const string & prefix) {
 	out << prefix << "<alternation>\n";
 	printContent(alternation->getElements(), out, prefix + INDENTATION);
 	out << prefix << "</alternation>\n";
 }
 
-void RegExpPrinter::printConcatenation(Concatenation* concatenation, ostream& out, string prefix) {
+void RegExpPrinter::printConcatenation(const Concatenation* concatenation, ostream& out, const string & prefix) {
 	out << prefix <<"<concatenation>\n";
 	printContent(concatenation->getElements(), out, prefix + INDENTATION);
 	out << prefix <<"</concatenation>\n";
 
 }
 
-void RegExpPrinter::printIteration(Iteration* iteration, ostream& out, string prefix) {
+void RegExpPrinter::printIteration(const Iteration* iteration, ostream& out, const string & prefix) {
 	out << prefix << "<iteration>\n";
 	printElement(iteration->getElement(), out, prefix + INDENTATION);
 	out << prefix << "</iteration>\n";
 }
 
-void RegExpPrinter::printSymbol(RegExpSymbol* symbol, ostream& out, string prefix) {
+void RegExpPrinter::printSymbol(const RegExpSymbol* symbol, ostream& out, const string & prefix) {
 	out << prefix << "<symbol>";
 	out << symbol->getSymbol();
 	out << "</symbol>\n";
 }
 
-void RegExpPrinter::printEpsilon(RegExpEpsilon* symbol, ostream& out, string prefix) {
+void RegExpPrinter::printEpsilon(const RegExpEpsilon* symbol, ostream& out, const string & prefix) {
 	out << prefix << "<epsilon>";
 	out << "</epsilon>\n";
 }
 
-void RegExpPrinter::printEmpty(RegExpEmpty* symbol, ostream& out, string prefix) {
+void RegExpPrinter::printEmpty(const RegExpEmpty* symbol, ostream& out, const string & prefix) {
 	out << prefix << "<empty>";
 	out << "</empty>\n";
 }
diff --git a/alib/src/regexp/RegExpPrinter.h b/alib/src/regexp/RegExpPrinter.h
index 49ba46d027298d068fde7355c487f239a57fc75e..d152e7d41b480a7c9aafbb4119024a61e03408d2 100644
--- a/alib/src/regexp/RegExpPrinter.h
+++ b/alib/src/regexp/RegExpPrinter.h
@@ -27,15 +27,15 @@ using namespace std;
 class RegExpPrinter {
 protected:
 	static const string INDENTATION;
-	static void printElement(RegExpElement* element, ostream& out, string prefix);
-	static void printContent(list<RegExpElement*>& content, ostream& out, string prefix);
-	static void printAlternation(Alternation* alternation, ostream& out, string prefix);
-	static void printConcatenation(Concatenation* concatenation, ostream& out, string prefix);
+	static void printElement(const RegExpElement* element, ostream& out, const string & prefix);
+	static void printContent(const list<RegExpElement*>& content, ostream& out, const string & prefix);
+	static void printAlternation(const Alternation* alternation, ostream& out, const string & prefix);
+	static void printConcatenation(const Concatenation* concatenation, ostream& out, const string & prefix);
 
-	static void printIteration(Iteration* iteration, ostream& out, string prefix);
-	static void printSymbol(RegExpSymbol* symbol, ostream& out, string prefix);
-	static void printEpsilon(RegExpEpsilon* symbol, ostream& out, string prefix);
-	static void printEmpty(RegExpEmpty* symbol, ostream& out, string prefix);
+	static void printIteration(const Iteration* iteration, ostream& out, const string & prefix);
+	static void printSymbol(const RegExpSymbol* symbol, ostream& out, const string & prefix);
+	static void printEpsilon(const RegExpEpsilon* symbol, ostream& out, const string & prefix);
+	static void printEmpty(const RegExpEmpty* symbol, ostream& out, const string & prefix);
 
 public:
 	/**
@@ -43,7 +43,7 @@ public:
 	 * @param regexp RegExp to print
 	 * @param out output stream to which print the RegExp
 	 */
-	static void toXML(RegExp& regexp, ostream& out);
+	static void toXML(const RegExp& regexp, ostream& out);
 };
 
 } /* namespace regexp */