diff --git a/alib2data/src/factory/GrammarFactory.cpp b/alib2data/src/factory/GrammarFactory.cpp
index 8564bf47daf14b82b01c0216b05bfdf90d063c28..ee75ddfc76057338223ad3ab9814868f73b73e92 100644
--- a/alib2data/src/factory/GrammarFactory.cpp
+++ b/alib2data/src/factory/GrammarFactory.cpp
@@ -40,19 +40,19 @@ Grammar GrammarFactory::fromTokens(std::list<sax::Token> tokens) {
 }
 
 void GrammarFactory::toFile(const Grammar& grammar, const std::string& filename) {
-	toFile(grammar.getGrammar(), filename);
+	toFile(grammar.getData(), filename);
 }
 
 std::string GrammarFactory::toString(const Grammar& grammar) {
-	return toString(grammar.getGrammar());
+	return toString(grammar.getData());
 }
 
 void GrammarFactory::toStdout(const Grammar& grammar) {
-	return GrammarFactory::toStdout(grammar.getGrammar());
+	return GrammarFactory::toStdout(grammar.getData());
 }
 
 void GrammarFactory::toStream(const Grammar& grammar, std::ostream& out) {
-	toStream(grammar.getGrammar(), out);
+	toStream(grammar.getData(), out);
 }
 
 void GrammarFactory::toFile(const GrammarBase& grammar, const std::string& filename) {
diff --git a/alib2data/src/grammar/Grammar.cpp b/alib2data/src/grammar/Grammar.cpp
deleted file mode 100644
index fc0fc1ad5a572bcfaf7be556ebc4976cae971952..0000000000000000000000000000000000000000
--- a/alib2data/src/grammar/Grammar.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Grammar.cpp
- *
- *  Created on: Apr 16, 2013
- *      Author: Martin Zak
- */
-
-#include "Grammar.h"
-
-namespace grammar {
-
-Grammar::Grammar(const GrammarBase& grammar) : grammar(grammar.clone()) {
-
-}
-
-Grammar::Grammar(GrammarBase&& grammar) : grammar(std::move(grammar).plunder()) {
-
-}
-
-Grammar::Grammar(const Grammar& other) : grammar(other.getGrammar().clone()) {
-
-}
-
-Grammar::Grammar(Grammar&& other) noexcept : grammar(std::move(other.getGrammar()).plunder()) {
-	other.grammar = NULL;
-}
-
-Grammar& Grammar::operator=(const Grammar& other) {
-	if(this == &other) return *this;
-
-	delete grammar;
-	grammar = other.getGrammar().clone();
-
-	return *this;
-}
-
-Grammar& Grammar::operator=(Grammar&& other) noexcept {
-	std::swap(this->grammar, other.grammar);
-	return *this;
-}
-
-Grammar::~Grammar() {
-	delete grammar;
-}
-
-const GrammarBase& Grammar::getGrammar() const {
-	return *grammar;
-}
-
-GrammarBase& Grammar::getGrammar() {
-	return *grammar;
-}
-
-void Grammar::setGrammar(const GrammarBase& grammar) {
-	delete this->grammar;
-	this->grammar = grammar.clone();
-}
-
-void Grammar::setGrammar(GrammarBase&& grammar) {
-	delete this->grammar;
-	this->grammar = std::move(grammar).plunder();
-}
-
-bool Grammar::operator!=(const Grammar& other) const {
-	return !(*this == other);
-}
-
-bool Grammar::operator==(const Grammar& other) const {
-	return this->getGrammar() == other.getGrammar();
-}
-
-std::ostream& operator<<(std::ostream& os, const Grammar& grammar) {
-	os << grammar.getGrammar();
-	return os;
-}
-
-} /* namespace grammar */
-
diff --git a/alib2data/src/grammar/Grammar.h b/alib2data/src/grammar/Grammar.h
index 95ffefe2bd4d8042f4c21055463314e5e80a44a9..5102031af0653507ff2102128cdfe6301e936529 100644
--- a/alib2data/src/grammar/Grammar.h
+++ b/alib2data/src/grammar/Grammar.h
@@ -10,36 +10,14 @@
 
 #include "../std/visitor.hpp"
 #include "GrammarBase.h"
+#include "../common/wrapper.hpp"
 
 namespace grammar {
 
 /**
  * Wrapper around automata.
  */
-class Grammar {
-protected:
-	GrammarBase* grammar;
-public:
-	explicit Grammar(const GrammarBase& grammar);
-	explicit Grammar(GrammarBase&& grammar);
-	Grammar(const Grammar& other);
-	Grammar(Grammar&&) noexcept;
-	Grammar& operator=(const Grammar& other);
-	Grammar& operator=(Grammar&& other) noexcept;
-	virtual ~Grammar() noexcept;
-
-	const GrammarBase& getGrammar() const;
-	GrammarBase& getGrammar();
-
-	void setGrammar(const GrammarBase& grammar);
-	void setGrammar(GrammarBase&& grammar);
-	
-	bool operator!=(const Grammar& other) const;
-
-	bool operator==(const Grammar& other) const;
-
-	friend std::ostream& operator<<(std::ostream& os, const Grammar& grammar);
-};
+typedef alib::wrapper<GrammarBase> Grammar;
 
 } /* namespace grammar */
 
diff --git a/alib2data/src/grammar/GrammarToXMLComposer.cpp b/alib2data/src/grammar/GrammarToXMLComposer.cpp
index 90a648879dbad56de99493c59e5095c87a2a492e..008ce281ba5856a6c3f176e82364dcdf2371d7be 100644
--- a/alib2data/src/grammar/GrammarToXMLComposer.cpp
+++ b/alib2data/src/grammar/GrammarToXMLComposer.cpp
@@ -632,7 +632,7 @@ void GrammarToXMLComposer::composeRuleRightLGRHS(std::list<sax::Token>& out, con
 
 std::list<sax::Token> GrammarToXMLComposer::compose(const Grammar& grammar) const {
 	std::list<sax::Token> out;
-	grammar.getGrammar().Accept((void*) &out, *this);
+	Visit((void*) &out, grammar);
 	return out;
 }
 
diff --git a/alib2data/test-src/grammar/GrammarTest.cpp b/alib2data/test-src/grammar/GrammarTest.cpp
index 20cb3ed63bb0304fc724c47bb3b9f9bd6acb38c9..d9e17136062d304b3b88ee21bfc81e8ab5ff8b06 100644
--- a/alib2data/test-src/grammar/GrammarTest.cpp
+++ b/alib2data/test-src/grammar/GrammarTest.cpp
@@ -51,7 +51,7 @@ void GrammarTest::testXMLParser() {
 	std::string tmp = grammar::GrammarFactory::toString(grammar);
 	grammar::Grammar grammar2 = grammar::GrammarFactory::fromString(tmp);
 
-	CPPUNIT_ASSERT( grammar == grammar2.getGrammar() );
+	CPPUNIT_ASSERT( grammar == grammar2.getData() );
   }
 }