diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index 9315f048d6e0b2b94844bde58a7900ccfac86589..2598b4b38fd4b46f48dee9b8be9125a6504c8767 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -49,6 +49,7 @@ const std::string Names::ALPHABET_BOTTOM_OF_THE_STACK_SYMBOL = "BottomOfTheStack
 const std::string Names::ALPHABET_END_SYMBOL = "EndSymbol";
 const std::string Names::ALPHABET_RANKED_SYMBOL = "RankedSymbol";
 const std::string Names::ALPHABET_BAR_SYMBOL = "BarSymbol";
+const std::string Names::ALPHABET_VARIABLES_BAR_SYMBOL = "VariablesBarSymbol";
 const std::string Names::ALPHABET_SUBTREE_WILDCARD_SYMBOL = "SubtreeWildcardSymbol";
 const std::string Names::ALPHABET_SYMBOL_SET_SYMBOL = "SymbolSetSymbol";
 const std::string Names::ALPHABET_SYMBOL_PAIR_SYMBOL = "SymbolPairSymbol";
@@ -306,6 +307,18 @@ void xmlApi<alphabet::BarSymbol>::compose(std::deque<sax::Token>& output, const
 	ToXMLComposers::symbolComposer.compose(output, data);
 }
 
+alphabet::VariablesBarSymbol xmlApi<alphabet::VariablesBarSymbol>::parse(std::deque<sax::Token>& input) {
+	return FromXMLParsers::symbolParser.parseVariablesBarSymbol(input);
+}
+
+bool xmlApi<alphabet::VariablesBarSymbol>::first(const std::deque<sax::Token>& input) {
+	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, Names::ALPHABET_VARIABLES_BAR_SYMBOL);
+}
+
+void xmlApi<alphabet::VariablesBarSymbol>::compose(std::deque<sax::Token>& output, const alphabet::VariablesBarSymbol& data) {
+	ToXMLComposers::symbolComposer.compose(output, data);
+}
+
 alphabet::SubtreeWildcardSymbol xmlApi<alphabet::SubtreeWildcardSymbol>::parse(std::deque<sax::Token>& input) {
 	return FromXMLParsers::symbolParser.parseSubtreeWildcardSymbol(input);
 }
@@ -1273,6 +1286,10 @@ void ToXMLComposers::Visit(void* data, const alphabet::BarSymbol& symbol) const
 	xmlApi<alphabet::BarSymbol>::compose(*((std::deque<sax::Token>*) data), symbol);
 }
 
+void ToXMLComposers::Visit(void* data, const alphabet::VariablesBarSymbol& symbol) const {
+	xmlApi<alphabet::VariablesBarSymbol>::compose(*((std::deque<sax::Token>*) data), symbol);
+}
+
 void ToXMLComposers::Visit(void* data, const alphabet::SubtreeWildcardSymbol& symbol) const {
 	xmlApi<alphabet::SubtreeWildcardSymbol>::compose(*((std::deque<sax::Token>*) data), symbol);
 }
diff --git a/alib2data/src/XmlApi.hpp b/alib2data/src/XmlApi.hpp
index 32b6e07f82ca0be9fa5f3b7257ef1e3a2a37e8c9..e2f1fdefda89634f0edc6ded28a070c7a072b7c5 100644
--- a/alib2data/src/XmlApi.hpp
+++ b/alib2data/src/XmlApi.hpp
@@ -50,6 +50,7 @@ public:
 	const static std::string ALPHABET_END_SYMBOL;
 	const static std::string ALPHABET_RANKED_SYMBOL;
 	const static std::string ALPHABET_BAR_SYMBOL;
+	const static std::string ALPHABET_VARIABLES_BAR_SYMBOL;
 	const static std::string ALPHABET_SUBTREE_WILDCARD_SYMBOL;
 	const static std::string ALPHABET_SYMBOL_PAIR_SYMBOL;
 	const static std::string ALPHABET_SYMBOL_SET_SYMBOL;
@@ -272,6 +273,13 @@ struct xmlApi<alphabet::BarSymbol> {
 	static void compose(std::deque<sax::Token>& output, const alphabet::BarSymbol& data);
 };
 
+template<>
+struct xmlApi<alphabet::VariablesBarSymbol> {
+	static alphabet::VariablesBarSymbol parse(std::deque<sax::Token>& input);
+	static bool first(const std::deque<sax::Token>& input);
+	static void compose(std::deque<sax::Token>& output, const alphabet::VariablesBarSymbol& data);
+};
+
 template<>
 struct xmlApi<alphabet::SubtreeWildcardSymbol> {
 	static alphabet::SubtreeWildcardSymbol parse(std::deque<sax::Token>& input);
@@ -861,6 +869,7 @@ private:
 	void Visit(void*, const alphabet::EndSymbol& symbol) const;
 	void Visit(void*, const alphabet::RankedSymbol& symbol) const;
 	void Visit(void*, const alphabet::BarSymbol& symbol) const;
+	void Visit(void*, const alphabet::VariablesBarSymbol& symbol) const;
 	void Visit(void*, const alphabet::SubtreeWildcardSymbol& symbol) const;
 	void Visit(void*, const alphabet::SymbolSetSymbol& label) const;
 	void Visit(void*, const alphabet::SymbolPairSymbol& label) const;
diff --git a/alib2data/src/alphabet/NextSymbol.cpp b/alib2data/src/alphabet/NextSymbol.cpp
index 7e44b3f31f913e34df6c86068361ccce3d249b07..49784c554b8f3d5cba5e361abadf0ca56f46cb3b 100644
--- a/alib2data/src/alphabet/NextSymbol.cpp
+++ b/alib2data/src/alphabet/NextSymbol.cpp
@@ -18,6 +18,7 @@
 #include "EndSymbol.h"
 #include "StartSymbol.h"
 #include "BarSymbol.h"
+#include "VariablesBarSymbol.h"
 #include "SubtreeWildcardSymbol.h"
 
 namespace alphabet {
@@ -71,6 +72,13 @@ void NextSymbol::Visit(void* userData, const BarSymbol& symbol) {
 	out = new Symbol(UniqueSymbol(Symbol(symbol), newId));
 }
 
+void NextSymbol::Visit(void* userData, const VariablesBarSymbol& symbol) {
+	Symbol* &out = *((Symbol**) userData);
+
+	primitive::Integer newId(0);
+	out = new Symbol(UniqueSymbol(Symbol(symbol), newId));
+}
+
 void NextSymbol::Visit(void* userData, const SubtreeWildcardSymbol& symbol) {
 	Symbol* &out = *((Symbol**) userData);
 
diff --git a/alib2data/src/alphabet/NextSymbol.h b/alib2data/src/alphabet/NextSymbol.h
index c3e7bf51f0d7ea52df36431a0b7ddcdf6f0927cc..cfdd8efada2db9bf212f46c4ffc42f9e602f4456 100644
--- a/alib2data/src/alphabet/NextSymbol.h
+++ b/alib2data/src/alphabet/NextSymbol.h
@@ -25,6 +25,7 @@ class NextSymbol : public VisitableSymbolBase::visitor_type {
 	void Visit(void*, const StartSymbol& symbol);
 	void Visit(void*, const RankedSymbol& symbol);
 	void Visit(void*, const BarSymbol& symbol);
+	void Visit(void*, const VariablesBarSymbol& symbol);
 	void Visit(void*, const SubtreeWildcardSymbol& symbol);
 	void Visit(void*, const SymbolPairSymbol& symbol);
 	void Visit(void*, const SymbolSetSymbol& symbol);
diff --git a/alib2data/src/alphabet/SymbolFeatures.h b/alib2data/src/alphabet/SymbolFeatures.h
index 670faf1358834121077f26a67b93cdcaf6a8211e..6b7b586b81e843ddb2748beb3c715c9f7ab2822e 100644
--- a/alib2data/src/alphabet/SymbolFeatures.h
+++ b/alib2data/src/alphabet/SymbolFeatures.h
@@ -17,6 +17,7 @@ enum class FEATURES {
 	END,
 	RANKED,
 	BAR,
+	VARIABLES_BAR,
 	SUBTREE_WILDCARD,
 	SYMBOL_SET_SYMBOL,
 	SYMBOL_PAIR_SYMBOL,
diff --git a/alib2data/src/alphabet/SymbolFromXMLParser.cpp b/alib2data/src/alphabet/SymbolFromXMLParser.cpp
index c37d1a98be14a69a5b6ba0f54e073d7d44cdbbfa..22ed3b9ddea97825495d86ebaec486c5cf1c5d98 100644
--- a/alib2data/src/alphabet/SymbolFromXMLParser.cpp
+++ b/alib2data/src/alphabet/SymbolFromXMLParser.cpp
@@ -15,7 +15,7 @@
 namespace alphabet {
 
 Symbol SymbolFromXMLParser::parseSymbol(std::deque<sax::Token>& input) const {
-	return parseSymbol(input, std::set<FEATURES>({FEATURES::LABELED, FEATURES::BLANK, FEATURES::BOTTOM, FEATURES::END, FEATURES::RANKED, FEATURES::BAR, FEATURES::SUBTREE_WILDCARD, FEATURES::SYMBOL_PAIR_SYMBOL, FEATURES::SYMBOL_SET_SYMBOL, FEATURES::UNIQUE_SYMBOL, FEATURES::START}));
+	return parseSymbol(input, std::set<FEATURES>({FEATURES::LABELED, FEATURES::BLANK, FEATURES::BOTTOM, FEATURES::END, FEATURES::RANKED, FEATURES::BAR, FEATURES::VARIABLES_BAR, FEATURES::SUBTREE_WILDCARD, FEATURES::SYMBOL_PAIR_SYMBOL, FEATURES::SYMBOL_SET_SYMBOL, FEATURES::UNIQUE_SYMBOL, FEATURES::START}));
 }
 
 Symbol SymbolFromXMLParser::parseSymbol(std::deque<sax::Token>& input, const std::set<FEATURES>& features) const {
@@ -40,6 +40,9 @@ Symbol SymbolFromXMLParser::parseSymbol(std::deque<sax::Token>& input, const std
 	} else if(alib::xmlApi<BarSymbol>::first(input)) {
 		if(!features.count(FEATURES::BAR)) throw exception::AlibException();
 		return Symbol(parseBarSymbol(input));
+	} else if(alib::xmlApi<VariablesBarSymbol>::first(input)) {
+		if(!features.count(FEATURES::VARIABLES_BAR)) throw exception::AlibException();
+		return Symbol(parseVariablesBarSymbol(input));
 	} else if(alib::xmlApi<SubtreeWildcardSymbol>::first(input)) {
 		if(!features.count(FEATURES::SUBTREE_WILDCARD)) throw exception::AlibException();
 		return Symbol(parseSubtreeWildcardSymbol(input));
@@ -53,12 +56,12 @@ Symbol SymbolFromXMLParser::parseSymbol(std::deque<sax::Token>& input, const std
 		if(!features.count(FEATURES::UNIQUE_SYMBOL)) throw exception::AlibException();
 		return Symbol(parseUniqueSymbol(input));
 	} else {
-		throw sax::ParserException(sax::Token("LabeledSymbol, BlankSymbol, BottomOfTheStackSymbol, EndSymbol, StartSymbol, RankedSymbol, BarSymbol, SubtreeWildcardSymbol, SymbolPairSymbol, SymbolSetSymbol, UniqueSymbol", sax::Token::TokenType::START_ELEMENT), input.front());
+		throw sax::ParserException(sax::Token("LabeledSymbol, BlankSymbol, BottomOfTheStackSymbol, EndSymbol, StartSymbol, RankedSymbol, BarSymbol, VariablesBar, SubtreeWildcardSymbol, SymbolPairSymbol, SymbolSetSymbol, UniqueSymbol", sax::Token::TokenType::START_ELEMENT), input.front());
 	}
 }
 
 bool SymbolFromXMLParser::first(const std::deque<sax::Token>& input) const {
-	if(alib::xmlApi<LabeledSymbol>::first(input) || alib::xmlApi<BlankSymbol>::first(input) || alib::xmlApi<BottomOfTheStackSymbol>::first(input) || alib::xmlApi<EndSymbol>::first(input) || alib::xmlApi<StartSymbol>::first(input) || alib::xmlApi<RankedSymbol>::first(input) || alib::xmlApi<BarSymbol>::first(input) || alib::xmlApi<SubtreeWildcardSymbol>::first(input) || alib::xmlApi<SymbolPairSymbol>::first(input) || alib::xmlApi<SymbolSetSymbol>::first(input)) {
+	if(alib::xmlApi<LabeledSymbol>::first(input) || alib::xmlApi<BlankSymbol>::first(input) || alib::xmlApi<BottomOfTheStackSymbol>::first(input) || alib::xmlApi<EndSymbol>::first(input) || alib::xmlApi<StartSymbol>::first(input) || alib::xmlApi<RankedSymbol>::first(input) || alib::xmlApi<BarSymbol>::first(input) || alib::xmlApi<VariablesBarSymbol>::first(input) || alib::xmlApi<SubtreeWildcardSymbol>::first(input) || alib::xmlApi<SymbolPairSymbol>::first(input) || alib::xmlApi<SymbolSetSymbol>::first(input)) {
 		return true;
 	} else {
 		return false;
@@ -110,6 +113,12 @@ BarSymbol SymbolFromXMLParser::parseBarSymbol(std::deque<sax::Token>& input) con
 	return BarSymbol();
 }
 
+VariablesBarSymbol SymbolFromXMLParser::parseVariablesBarSymbol(std::deque<sax::Token>& input) const {
+	popToken(input, sax::Token::TokenType::START_ELEMENT, alib::Names::ALPHABET_BAR_SYMBOL);
+	popToken(input, sax::Token::TokenType::END_ELEMENT, alib::Names::ALPHABET_BAR_SYMBOL);
+	return VariablesBarSymbol();
+}
+
 SubtreeWildcardSymbol SymbolFromXMLParser::parseSubtreeWildcardSymbol(std::deque<sax::Token>& input) const {
 	popToken(input, sax::Token::TokenType::START_ELEMENT, alib::Names::ALPHABET_SUBTREE_WILDCARD_SYMBOL);
 	popToken(input, sax::Token::TokenType::END_ELEMENT, alib::Names::ALPHABET_SUBTREE_WILDCARD_SYMBOL);
diff --git a/alib2data/src/alphabet/SymbolFromXMLParser.h b/alib2data/src/alphabet/SymbolFromXMLParser.h
index 0dfa598c3a3f2a44063c3d05d36933f7f3537880..2fce739895c63ecf72c1bf7a387808a3820a5d85 100644
--- a/alib2data/src/alphabet/SymbolFromXMLParser.h
+++ b/alib2data/src/alphabet/SymbolFromXMLParser.h
@@ -23,6 +23,7 @@
 #include "LabeledSymbol.h"
 #include "RankedSymbol.h"
 #include "BarSymbol.h"
+#include "VariablesBarSymbol.h"
 #include "SubtreeWildcardSymbol.h"
 #include "SymbolPairSymbol.h"
 #include "SymbolSetSymbol.h"
@@ -55,6 +56,7 @@ private:
 	StartSymbol parseStartSymbol(std::deque<sax::Token>& input) const;
 	RankedSymbol parseRankedSymbol(std::deque<sax::Token>& input) const;
 	BarSymbol parseBarSymbol(std::deque<sax::Token>& input) const;
+	VariablesBarSymbol parseVariablesBarSymbol(std::deque<sax::Token>& input) const;
 	SubtreeWildcardSymbol parseSubtreeWildcardSymbol(std::deque<sax::Token>& input) const;
 	SymbolPairSymbol parseSymbolPairSymbol(std::deque<sax::Token>& input) const;
 	SymbolSetSymbol parseSymbolSetSymbol(std::deque<sax::Token>& input) const;
diff --git a/alib2data/src/alphabet/SymbolToStringComposer.cpp b/alib2data/src/alphabet/SymbolToStringComposer.cpp
index 6da95cc6107a61628bd9d1f9bb094ec599fc67b2..12eda41d0c909fc8bebc1abfa33a66b5c83ca953 100644
--- a/alib2data/src/alphabet/SymbolToStringComposer.cpp
+++ b/alib2data/src/alphabet/SymbolToStringComposer.cpp
@@ -59,6 +59,12 @@ void SymbolToStringComposer::Visit(void* userData, const BarSymbol&) const {
 	out << "#|";
 }
 
+void SymbolToStringComposer::Visit(void* userData, const VariablesBarSymbol&) const {
+	std::ostream &out = *((std::ostream*) userData);
+
+	out << "#/";
+}
+
 void SymbolToStringComposer::Visit(void* userData, const SubtreeWildcardSymbol&) const {
 	std::ostream &out = *((std::ostream*) userData);
 
diff --git a/alib2data/src/alphabet/SymbolToStringComposer.h b/alib2data/src/alphabet/SymbolToStringComposer.h
index 55af7382964dc1c7b43aacaf8eb09c9e849beefc..a576f650ca57a2eaf28fe51f3f675fc5a13d6f78 100644
--- a/alib2data/src/alphabet/SymbolToStringComposer.h
+++ b/alib2data/src/alphabet/SymbolToStringComposer.h
@@ -28,6 +28,7 @@ private:
 	void Visit(void*, const StartSymbol& symbol) const;
 	void Visit(void*, const RankedSymbol& symbol) const;
 	void Visit(void*, const BarSymbol& symbol) const;
+	void Visit(void*, const VariablesBarSymbol& symbol) const;
 	void Visit(void*, const SubtreeWildcardSymbol& symbol) const;
 	void Visit(void*, const SymbolPairSymbol& symbol) const;
 	void Visit(void*, const SymbolSetSymbol& symbol) const;
diff --git a/alib2data/src/alphabet/SymbolToXMLComposer.cpp b/alib2data/src/alphabet/SymbolToXMLComposer.cpp
index 7685dbe54548053443521bdcdc9a2144606857f1..b21e0b423c2ab9171c8c7d375c2f990d9b03df4d 100644
--- a/alib2data/src/alphabet/SymbolToXMLComposer.cpp
+++ b/alib2data/src/alphabet/SymbolToXMLComposer.cpp
@@ -57,6 +57,11 @@ void SymbolToXMLComposer::compose(std::deque<sax::Token>& out, const BarSymbol&)
 	out.emplace_back(alib::Names::ALPHABET_BAR_SYMBOL, sax::Token::TokenType::END_ELEMENT);
 }
 
+void SymbolToXMLComposer::compose(std::deque<sax::Token>& out, const VariablesBarSymbol&) const {
+	out.emplace_back(alib::Names::ALPHABET_VARIABLES_BAR_SYMBOL, sax::Token::TokenType::START_ELEMENT);
+	out.emplace_back(alib::Names::ALPHABET_VARIABLES_BAR_SYMBOL, sax::Token::TokenType::END_ELEMENT);
+}
+
 void SymbolToXMLComposer::compose(std::deque<sax::Token>& out, const SubtreeWildcardSymbol&) const {
 	out.emplace_back(alib::Names::ALPHABET_SUBTREE_WILDCARD_SYMBOL, sax::Token::TokenType::START_ELEMENT);
 	out.emplace_back(alib::Names::ALPHABET_SUBTREE_WILDCARD_SYMBOL, sax::Token::TokenType::END_ELEMENT);
diff --git a/alib2data/src/alphabet/SymbolToXMLComposer.h b/alib2data/src/alphabet/SymbolToXMLComposer.h
index 15642f74ed920e92f8daedf4cb8f112c9c14e7a4..cf8701a3c112069552d6aaf6eac03f1d061634a1 100644
--- a/alib2data/src/alphabet/SymbolToXMLComposer.h
+++ b/alib2data/src/alphabet/SymbolToXMLComposer.h
@@ -51,6 +51,7 @@ private:
 	void compose(std::deque<sax::Token>& output, const StartSymbol& symbol) const;
 	void compose(std::deque<sax::Token>& output, const RankedSymbol& symbol) const;
 	void compose(std::deque<sax::Token>& output, const BarSymbol& symbol) const;
+	void compose(std::deque<sax::Token>& output, const VariablesBarSymbol& symbol) const;
 	void compose(std::deque<sax::Token>& output, const SubtreeWildcardSymbol& symbol) const;
 	void compose(std::deque<sax::Token>& output, const SymbolPairSymbol& symbol) const;
 	void compose(std::deque<sax::Token>& output, const SymbolSetSymbol& symbol) const;
diff --git a/alib2data/src/alphabet/VariablesBarSymbol.cpp b/alib2data/src/alphabet/VariablesBarSymbol.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..faeaeb03587fcafe29c0723fb9393be7219081ad
--- /dev/null
+++ b/alib2data/src/alphabet/VariablesBarSymbol.cpp
@@ -0,0 +1,38 @@
+/*
+ * VariablesBarSymbol.h
+ *
+ *  Created on: Apr 10, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "VariablesBarSymbol.h"
+
+namespace alphabet {
+
+VariablesBarSymbol::VariablesBarSymbol() {
+
+}
+
+SymbolBase* VariablesBarSymbol::clone() const {
+	return new VariablesBarSymbol(*this);
+}
+
+SymbolBase* VariablesBarSymbol::plunder() && {
+	return new VariablesBarSymbol(std::move(*this));
+}
+
+int VariablesBarSymbol::compare(const VariablesBarSymbol&) const {
+	return 0;
+}
+
+void VariablesBarSymbol::operator>>(std::ostream& out) const {
+	out << "(Bar symbol)";
+}
+
+VariablesBarSymbol::operator std::string () const {
+	return "|";
+}
+
+VariablesBarSymbol VariablesBarSymbol::BAR = VariablesBarSymbol();
+
+} /* namespace alphabet */
diff --git a/alib2data/src/alphabet/VariablesBarSymbol.h b/alib2data/src/alphabet/VariablesBarSymbol.h
new file mode 100644
index 0000000000000000000000000000000000000000..f1ed01f07dc90bf1cbb135abf23116e1d95284d2
--- /dev/null
+++ b/alib2data/src/alphabet/VariablesBarSymbol.h
@@ -0,0 +1,59 @@
+/*
+ * VariablesBarSymbol.h
+ *
+ *  Created on: Apr 10, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef VARIABLES_BAR_SYMBOL_H_
+#define VARIABLES_BAR_SYMBOL_H_
+
+#include "Symbol.h"
+
+namespace alphabet {
+
+/**
+ * Represents bar symbol for tree linearization.
+ */
+class VariablesBarSymbol : public std::acceptor<VariablesBarSymbol, VisitableSymbolBase, std::acceptor<VariablesBarSymbol, alib::VisitableObjectBase, SymbolBase> > {
+public:
+	/**
+	 * Creates a bar symbol.
+	 * @param symbol name of the symbol
+	 */
+	explicit VariablesBarSymbol();
+
+	virtual SymbolBase* clone() const;
+	virtual SymbolBase* plunder() &&;
+
+	virtual int compare(const ObjectBase& other) const {
+		return -other.compare(*this);
+	}
+
+	virtual int compare(const VariablesBarSymbol& other) const;
+
+	virtual void operator>>(std::ostream& out) const;
+
+	virtual explicit operator std::string () const;
+
+	virtual int selfTypeId() const {
+		return typeId(*this);
+	}
+
+	static VariablesBarSymbol BAR;
+};
+
+} /* namespace alphabet */
+
+namespace std {
+
+template<>
+struct compare<alphabet::VariablesBarSymbol> {
+	int operator()(const alphabet::VariablesBarSymbol& first, const alphabet::VariablesBarSymbol& second) const {
+		return first.compare(second);
+	}
+};
+
+} /* namespace std */
+
+#endif /* VARIABLES_BAR_SYMBOL_H_ */
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index 3b48ca0e6bee183e2cb53e1f9d4ec65014aaf358..f6649b1100bc5956834dd3fae82ae6457c831c0a 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -108,6 +108,7 @@ class BlankSymbol;
 class BottomOfTheStackSymbol;
 class RankedSymbol;
 class BarSymbol;
+class VariablesBarSymbol;
 class SubtreeWildcardSymbol;
 class SymbolSetSymbol;
 class SymbolPairSymbol;
@@ -163,7 +164,7 @@ typedef std::tuple< primitive::String, primitive::Integer, primitive::Character,
 typedef std::tuple< container::ObjectsSet, container::ObjectsVector, container::ObjectsPair, container::ObjectsMap
 	> ContainerTypes;
 
-typedef std::tuple< alphabet::EndSymbol, alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::RankedSymbol, alphabet::BarSymbol, alphabet::SubtreeWildcardSymbol, alphabet::SymbolPairSymbol, alphabet::SymbolSetSymbol, alphabet::UniqueSymbol, alphabet::StartSymbol
+typedef std::tuple< alphabet::EndSymbol, alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::RankedSymbol, alphabet::BarSymbol, alphabet::VariablesBarSymbol, alphabet::SubtreeWildcardSymbol, alphabet::SymbolPairSymbol, alphabet::SymbolSetSymbol, alphabet::UniqueSymbol, alphabet::StartSymbol
 	> SymbolTypes;
 
 typedef std::tuple< string::Epsilon, string::LinearString, string::CyclicString