diff --git a/alib2data/src/label/LR0ItemsLabel.cpp b/alib2data/src/label/LR0ItemsLabel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b3536159f8c843c4aba960dc96c939e5799558e6
--- /dev/null
+++ b/alib2data/src/label/LR0ItemsLabel.cpp
@@ -0,0 +1,89 @@
+/*
+ * LR0ItemsLabel.cpp
+ *
+ *  Created on: 29. 4. 2016
+ *      Author: Martin Kocicka
+ */
+
+#include "LR0ItemsLabel.h"
+#include <sax/FromXMLParserHelper.h>
+#include "Label.h"
+#include <object/Object.h>
+#include <XmlApi.hpp>
+#include "UniqueLabel.h"
+#include "../container/ObjectsMap.h"
+#include "../container/ObjectsSet.h"
+#include "../container/ObjectsVector.h"
+#include "../primitive/Unsigned.h"
+
+namespace label {
+
+LR0ItemsLabel::LR0ItemsLabel ( grammar::parsing::LR0Items items ) : items ( items ) {
+}
+
+LR0ItemsLabel::LR0ItemsLabel ( ) {
+}
+
+LabelBase* LR0ItemsLabel::clone ( ) const {
+	return new LR0ItemsLabel ( *this );
+}
+
+LabelBase* LR0ItemsLabel::plunder ( ) && {
+	return new LR0ItemsLabel ( std::move ( *this ) );
+}
+
+bool LR0ItemsLabel::operator < ( const LR0ItemsLabel & other ) const {
+	return this->compare(other) < 0;
+}
+
+int LR0ItemsLabel::compare ( const LR0ItemsLabel & other ) const {
+	if ( items < other.items ) {
+		return -1;
+	} else if ( items > other.items ) {
+		return 1;
+	} else {
+		return 0;
+	}
+}
+
+void LR0ItemsLabel::operator>>(std::ostream & out) const {
+	out << "(LR0ItemsLabel " << items << ")";
+}
+
+LR0ItemsLabel::operator std::string ( ) const {
+	std::stringstream ss;
+	ss << *this;
+	return ss.str ( );
+}
+
+const std::string LR0ItemsLabel::XML_TAG_NAME = "LR0ItemsLabel";
+
+LR0ItemsLabel LR0ItemsLabel::parse ( std::deque<sax::Token>::iterator& input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, LR0ItemsLabel::XML_TAG_NAME );
+	LR0ItemsLabel data ( alib::xmlApi < grammar::parsing::LR0Items > ::parse ( input ) );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, LR0ItemsLabel::XML_TAG_NAME );
+	return data;
+}
+
+void LR0ItemsLabel::compose(std::deque<sax::Token>& out) const {
+	out.emplace_back ( LR0ItemsLabel::XML_TAG_NAME, sax::Token::TokenType::START_ELEMENT );
+	alib::xmlApi < grammar::parsing::LR0Items > ::compose ( out, items );
+	out.emplace_back ( LR0ItemsLabel::XML_TAG_NAME, sax::Token::TokenType::END_ELEMENT );
+}
+
+LabelBase* LR0ItemsLabel::next ( ) const {
+	return new UniqueLabel ( Label ( *this ), primitive::Integer ( 0 ) );
+}
+
+LabelBase* LR0ItemsLabel::inc ( ) && {
+	return new UniqueLabel ( Label ( std::move ( *this ) ), primitive::Integer ( 0 ) );
+}
+
+} /* namespace label */
+
+namespace alib {
+
+auto lr0ItemsLabelParserRegister = xmlApi < label::Label > ::ParserRegister < label::LR0ItemsLabel > ( );
+auto lr0ItemsLabelParserRegister2 = xmlApi < alib::Object > ::ParserRegister < label::LR0ItemsLabel > ( );
+
+} /* namespace alib */
diff --git a/alib2data/src/label/LR0ItemsLabel.h b/alib2data/src/label/LR0ItemsLabel.h
new file mode 100644
index 0000000000000000000000000000000000000000..6d181397b41f57b3b82ea62b341fe339ef720be4
--- /dev/null
+++ b/alib2data/src/label/LR0ItemsLabel.h
@@ -0,0 +1,93 @@
+/*
+ * LR0ItemsLabel.h
+ *
+ *  Created on: 29. 4. 2016
+ *      Author: Martin Kocicka
+ */
+
+#ifndef LR0ITEMS_LABEL_H_
+#define LR0ITEMS_LABEL_H_
+
+#include <map>
+#include <set>
+#include <vector>
+
+#include <object/Object.h>
+#include "LabelBase.h"
+#include "Label.h"
+#include "../alphabet/Symbol.h"
+#include "../grammar/parsing/LRParserTypes.h"
+
+namespace label {
+
+/**
+ * Represents symbol in an alphabet.
+ */
+class LR0ItemsLabel : public LabelBase {
+protected:
+	grammar::parsing::LR0Items items;
+
+public:
+	/**
+	 * Creates new symbol with given name.
+	 * @param symbol name of the symbol
+	 */
+	explicit LR0ItemsLabel ( grammar::parsing::LR0Items items );
+
+	/**
+	 * Creates new symbol with given name.
+	 * @param symbol name of the symbol
+	 */
+	explicit LR0ItemsLabel ( );
+
+	virtual LabelBase * clone ( ) const;
+
+	virtual LabelBase * plunder ( ) &&;
+
+	const grammar::parsing::LR0Items & getItems ( ) const {
+		return items;
+	}
+
+	grammar::parsing::LR0Items & getItems ( ) {
+		return items;
+	}
+
+	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 LR0ItemsLabel & other ) const;
+
+	bool operator < (const LR0ItemsLabel& other) const;
+
+	virtual void operator >>( std::ostream & ) const;
+
+	virtual explicit operator std::string ( ) const;
+
+	const static std::string XML_TAG_NAME;
+
+	static LR0ItemsLabel parse ( std::deque < sax::Token >::iterator & input );
+
+	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual LabelBase * next ( ) const;
+	virtual LabelBase * inc ( ) &&;
+};
+
+} /* namespace label */
+
+namespace std {
+
+template < >
+struct compare < label::LR0ItemsLabel > {
+	int operator ()( const label::LR0ItemsLabel & first, const label::LR0ItemsLabel & second ) const {
+		return first.compare ( second );
+	}
+
+};
+
+} /* namespace std */
+
+#endif /* LR0ITEMS_LABEL_H_ */