diff --git a/alib2/src/regexp/RegExpFeatures.h b/alib2/src/regexp/RegExpFeatures.h
new file mode 100644
index 0000000000000000000000000000000000000000..a1b64f7cedfdda9a192aa3e9adf72107fa0a267b
--- /dev/null
+++ b/alib2/src/regexp/RegExpFeatures.h
@@ -0,0 +1,19 @@
+/*
+ * RegExpFeatures.h
+ *
+ *  Created on: Jun 19, 2014
+ *      Author: Jan Travnicek
+ */
+
+#ifndef REG_EXP_FEATURES_H_
+#define REG_EXP_FEATURES_H_
+
+namespace regexp {
+
+enum class FEATURES {
+	COMPACT
+};
+
+} /* namespace regexp */
+
+#endif /* REG_EXP_FEATURES_H_ */
diff --git a/alib2/src/regexp/RegExpFromStringParser.cpp b/alib2/src/regexp/RegExpFromStringParser.cpp
index 77995d4cb610905fca09f4001fdd61c8d06caf6e..5af3a1e1a7a94b28323cc4595bc3f1530770bf40 100644
--- a/alib2/src/regexp/RegExpFromStringParser.cpp
+++ b/alib2/src/regexp/RegExpFromStringParser.cpp
@@ -9,6 +9,11 @@ RegExpFromStringParser::RegExpFromStringParser(std::stringstream& input) : m_Reg
 }
 
 RegExp RegExpFromStringParser::parse() {
+	return parse(std::set<FEATURES>({FEATURES::COMPACT}));
+}
+
+RegExp RegExpFromStringParser::parse(const std::set<FEATURES>& features) {
+	if(!features.count(FEATURES::COMPACT)) throw alib::AlibException();
 	RegExpElement* element = this->alternation();
 	RegExp regexp(std::move(*element));
 	delete element;
diff --git a/alib2/src/regexp/RegExpFromStringParser.h b/alib2/src/regexp/RegExpFromStringParser.h
index f7775f82bb8c0f2bbf0a33d99910ede488510237..f12db58fa694ebc89c53498ca6e4bbae2d8c4c48 100644
--- a/alib2/src/regexp/RegExpFromStringParser.h
+++ b/alib2/src/regexp/RegExpFromStringParser.h
@@ -13,6 +13,7 @@
 
 #include "RegExpFromStringLexer.h"
 #include "../alphabet/SymbolFromStringParser.h"
+#include "RegExpFeatures.h"
 
 namespace regexp {
 
@@ -32,6 +33,7 @@ class RegExpFromStringParser {
 	alphabet::SymbolFromStringParser m_SymbolParser;
 
 	RegExp parse();
+	RegExp parse(const std::set<FEATURES>& features);
 	RegExp* parsePointer();
 public:
 	RegExpFromStringParser(std::stringstream&);
diff --git a/alib2/src/regexp/RegExpFromXMLParser.cpp b/alib2/src/regexp/RegExpFromXMLParser.cpp
index 9d29abb388890d3c8e485ff0b474faf9ec87cea8..ef747b99e489a375b3b8eddc28438e8611a960d1 100644
--- a/alib2/src/regexp/RegExpFromXMLParser.cpp
+++ b/alib2/src/regexp/RegExpFromXMLParser.cpp
@@ -14,6 +14,11 @@
 namespace regexp {
 
 RegExp RegExpFromXMLParser::parse(std::list<sax::Token>& input) const {
+	return parse(input, std::set<FEATURES>({FEATURES::COMPACT}));
+}
+
+RegExp RegExpFromXMLParser::parse(std::list<sax::Token>& input, const std::set<FEATURES>& features) const {
+	if(!features.count(FEATURES::COMPACT)) throw alib::AlibException();
 	popToken(input, sax::Token::TokenType::START_ELEMENT, "regexp");
 	
 	RegExp regexp;
diff --git a/alib2/src/regexp/RegExpFromXMLParser.h b/alib2/src/regexp/RegExpFromXMLParser.h
index 6ce576a756f02030e0f9cd0c3587c63f2559f7e6..5d868d9a0347d263408c79507cf24e5054e91806 100644
--- a/alib2/src/regexp/RegExpFromXMLParser.h
+++ b/alib2/src/regexp/RegExpFromXMLParser.h
@@ -10,6 +10,7 @@
 
 #include "../sax/FromXMLParser.h"
 #include "RegExp.h"
+#include "RegExpFeatures.h"
 #include "RegExpElements.h"
 #include "../sax/Token.h"
 #include "../alphabet/Symbol.h"
@@ -21,7 +22,7 @@ namespace regexp {
  */
 class RegExpFromXMLParser : public sax::FromXMLParser {
 	void parseAlphabet(std::list<sax::Token>& input, RegExp& regexp) const;
-  
+
 	RegExpElement* parseElement(std::list<sax::Token>& input) const;
 
 	RegExpEpsilon* parseEpsilon(std::list<sax::Token>& input) const;
@@ -31,6 +32,7 @@ class RegExpFromXMLParser : public sax::FromXMLParser {
 	Concatenation* parseConcatenation(std::list<sax::Token> &input) const;
 
 	RegExp parse(std::list<sax::Token>& input) const;
+	RegExp parse(std::list<sax::Token>& input, const std::set<FEATURES>& features) const;
 	RegExp* parsePointer(std::list<sax::Token>& input) const;
 public:
 	/**