diff --git a/alib2data/src/alphabet/NonlinearVariableSymbol.cpp b/alib2data/src/alphabet/NonlinearVariableSymbol.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f58bea6d8c8d94a33ab07d59fd0000258e1d3bcf
--- /dev/null
+++ b/alib2data/src/alphabet/NonlinearVariableSymbol.cpp
@@ -0,0 +1,80 @@
+/*
+ * NonlinearVariableSymbol.cpp
+ *
+ *  Created on: Apr 10, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "NonlinearVariableSymbol.h"
+#include <sax/FromXMLParserHelper.h>
+#include "Symbol.h"
+#include <object/Object.h>
+#include <XmlApi.hpp>
+#include "UniqueSymbol.h"
+
+namespace alphabet {
+
+NonlinearVariableSymbol::NonlinearVariableSymbol ( int number ) : symbol ( alphabet::symbolFrom ( number ) ) {
+}
+
+NonlinearVariableSymbol::NonlinearVariableSymbol ( char character ) : symbol ( alphabet::symbolFrom ( character ) ) {
+}
+
+NonlinearVariableSymbol::NonlinearVariableSymbol ( std::string symbol ) : symbol ( alphabet::symbolFrom ( std::move ( symbol ) ) ) {
+}
+
+NonlinearVariableSymbol::NonlinearVariableSymbol ( alphabet::Symbol symbol ) : symbol ( std::move ( symbol ) ) {
+}
+
+SymbolBase * NonlinearVariableSymbol::clone ( ) const {
+	return new NonlinearVariableSymbol ( * this );
+}
+
+SymbolBase * NonlinearVariableSymbol::plunder ( ) && {
+	return new NonlinearVariableSymbol ( std::move ( * this ) );
+}
+
+int NonlinearVariableSymbol::compare ( const NonlinearVariableSymbol & other ) const {
+	return this->symbol.getData ( ).compare ( other.symbol.getData ( ) );
+}
+
+void NonlinearVariableSymbol::operator >>( std::ostream & out ) const {
+	out << "(NonlinearVariableSymbol " << symbol << ")";
+}
+
+NonlinearVariableSymbol::operator std::string ( ) const {
+	return "$" + ( std::string ) symbol;
+}
+
+const std::string NonlinearVariableSymbol::XML_TAG_NAME = "NonlinearVariableSymbol";
+
+NonlinearVariableSymbol NonlinearVariableSymbol::parse ( std::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, NonlinearVariableSymbol::XML_TAG_NAME );
+	alphabet::Symbol data = alib::xmlApi < alphabet::Symbol >::parse ( input );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, NonlinearVariableSymbol::XML_TAG_NAME );
+
+	return NonlinearVariableSymbol ( data );
+}
+
+void NonlinearVariableSymbol::compose ( std::deque < sax::Token > & out ) const {
+	out.emplace_back ( NonlinearVariableSymbol::XML_TAG_NAME, sax::Token::TokenType::START_ELEMENT );
+	alib::xmlApi < alphabet::Symbol >::compose ( out, symbol );
+	out.emplace_back ( NonlinearVariableSymbol::XML_TAG_NAME, sax::Token::TokenType::END_ELEMENT );
+}
+
+SymbolBase * NonlinearVariableSymbol::next ( ) const {
+	return new UniqueSymbol ( Symbol ( * this ), primitive::Integer ( 0 ) );
+}
+
+SymbolBase * NonlinearVariableSymbol::inc ( ) && {
+	return new UniqueSymbol ( Symbol ( std::move ( * this ) ), primitive::Integer ( 0 ) );
+}
+
+} /* namespace alphabet */
+
+namespace alib {
+
+auto nonlinearVariableSymbolParserRegister	= xmlApi < alphabet::Symbol >::ParserRegister < alphabet::NonlinearVariableSymbol > ( );
+auto nonlinearVariableSymbolParserRegister2 = xmlApi < alib::Object >::ParserRegister < alphabet::NonlinearVariableSymbol > ( );
+
+} /* namespace alib */
diff --git a/alib2data/src/alphabet/NonlinearVariableSymbol.h b/alib2data/src/alphabet/NonlinearVariableSymbol.h
new file mode 100644
index 0000000000000000000000000000000000000000..6a34fe0817f0ac7832be36edddeae1da20e85011
--- /dev/null
+++ b/alib2data/src/alphabet/NonlinearVariableSymbol.h
@@ -0,0 +1,72 @@
+/*
+ * NonlinearVariableSymbol.h
+ *
+ *  Created on: Apr 10, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef NONLINEAR_VARIABLE_SYMBOL_H_
+#define NONLINEAR_VARIABLE_SYMBOL_H_
+
+#include "Symbol.h"
+
+namespace alphabet {
+
+/**
+ * Represents subtreeWildcard symbol for tree linearization.
+ */
+class NonlinearVariableSymbol : public SymbolBase {
+	alphabet::Symbol symbol;
+
+public:
+	explicit NonlinearVariableSymbol ( int number );
+	explicit NonlinearVariableSymbol ( char character );
+	explicit NonlinearVariableSymbol ( std::string symbol );
+	explicit NonlinearVariableSymbol ( alphabet::Symbol symbol );
+
+	/**
+	 * Creates a subtreeWildcard symbol.
+	 * @param symbol name of the symbol
+	 */
+	explicit NonlinearVariableSymbol ( );
+
+	virtual SymbolBase * clone ( ) const;
+	virtual SymbolBase * plunder ( ) &&;
+
+	virtual int compare ( const ObjectBase & other ) const {
+		if ( std::type_index ( typeid ( * this ) ) == std::type_index ( typeid ( other ) ) ) return this->compare ( ( decltype ( * this ) )other );
+
+		return std::type_index ( typeid ( * this ) ) - std::type_index ( typeid ( other ) );
+	}
+
+	virtual int compare ( const NonlinearVariableSymbol & other ) const;
+
+	virtual void operator >>( std::ostream & out ) const;
+
+	virtual explicit operator std::string ( ) const;
+
+	const static std::string XML_TAG_NAME;
+
+	static NonlinearVariableSymbol parse ( std::deque < sax::Token >::iterator & input );
+
+	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual SymbolBase * next ( ) const;
+	virtual SymbolBase * inc ( ) &&;
+};
+
+} /* namespace alphabet */
+
+namespace std {
+
+template < >
+struct compare < alphabet::NonlinearVariableSymbol > {
+	int operator ()( const alphabet::NonlinearVariableSymbol & first, const alphabet::NonlinearVariableSymbol & second ) const {
+		return first.compare ( second );
+	}
+
+};
+
+} /* namespace std */
+
+#endif /* NONLINEAR_VARIABLE_SYMBOL_H_ */