diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
index a689907aedebd18851a054f4b8703591efc7cae4..216e68780b31969ed6dc31f94b1c6d49346075e9 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
@@ -20,6 +20,10 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
+
+#include "../../alphabet/BarSymbol.h"
+#include "../../alphabet/VariablesBarSymbol.h"
 
 namespace tree {
 
@@ -40,6 +44,9 @@ PrefixRankedBarPattern::PrefixRankedBarPattern ( alphabet::Symbol bar, alphabet:
 	alphabet = std::set < alphabet::RankedSymbol > ( m_Data.begin ( ), m_Data.end ( ) );
 }
 
+PrefixRankedBarPattern::PrefixRankedBarPattern ( const RankedPattern & tree ) : PrefixRankedBarPattern ( alphabet::Symbol ( alphabet::BarSymbol::BAR ), alphabet::Symbol ( alphabet::VariablesBarSymbol::BAR ), tree ) {
+}
+
 void PrefixRankedBarPattern::toPrefixRankedBar ( const RankedNode & node ) {
 	if ( node.getSymbol ( ) == subtreeWildcard ) {
 		m_Data.push_back ( node.getSymbol ( ) );
@@ -197,4 +204,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarPattern > prefixRankedBarPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarPattern > ( tree::PrefixRankedBarPattern::XML_TAG_NAME, tree::PrefixRankedBarPattern::parse );
 xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarPattern > prefixRankedBarPatternParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarPattern > ( tree::PrefixRankedBarPattern::XML_TAG_NAME, tree::PrefixRankedBarPattern::parse );
 
+auto PrefixRankedBarPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedBarPattern, tree::RankedPattern > ( );
+auto PrefixRankedBarPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarPattern > ( tree::PrefixRankedBarPattern::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index 6a5116caceab68f2670e9b7a71d59ab570cd73e3..91d0ed76f59621c540964ad2e47f22068e609f91 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -34,6 +34,7 @@ public:
 	explicit PrefixRankedBarPattern ( alphabet::Symbol bar, alphabet::Symbol variablesBar, alphabet::RankedSymbol subtreeWildcard, std::set < alphabet::RankedSymbol > alphabet, std::vector < alphabet::RankedSymbol > data );
 	explicit PrefixRankedBarPattern ( alphabet::Symbol bar, alphabet::Symbol variablesBar, alphabet::RankedSymbol subtreeWildcard, std::vector < alphabet::RankedSymbol > data );
 	explicit PrefixRankedBarPattern ( alphabet::Symbol bar, alphabet::Symbol variablesBar, const RankedPattern & tree );
+	explicit PrefixRankedBarPattern ( const RankedPattern & tree );
 
 	void toPrefixRankedBar ( const RankedNode & node );
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
index 6a69b672ad1bd7503d9925b31b10db57e045c630..e66bccfb652ff2b3750a943ea1f8b70fae4442cd 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
@@ -20,6 +20,9 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
+
+#include "../../alphabet/BarSymbol.h"
 
 namespace tree {
 
@@ -40,6 +43,9 @@ PrefixRankedBarTree::PrefixRankedBarTree ( alphabet::Symbol bar, const RankedTre
 	alphabet = std::set < alphabet::RankedSymbol > ( m_Data.begin ( ), m_Data.end ( ) );
 }
 
+PrefixRankedBarTree::PrefixRankedBarTree ( const RankedTree & tree ) : PrefixRankedBarTree ( alphabet::Symbol ( alphabet::BarSymbol::BAR ), tree ) {
+}
+
 void PrefixRankedBarTree::toPrefixRankedBar ( const RankedNode & node ) {
 	m_Data.push_back ( node.getSymbol ( ) );
 
@@ -177,4 +183,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarTree > prefixRankedBarTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarTree > ( tree::PrefixRankedBarTree::XML_TAG_NAME, tree::PrefixRankedBarTree::parse );
 xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarTree > prefixRankedBarTreeParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarTree > ( tree::PrefixRankedBarTree::XML_TAG_NAME, tree::PrefixRankedBarTree::parse );
 
+auto PrefixRankedBarTreeFromRankedTree = castApi::CastRegister < tree::PrefixRankedBarTree, tree::RankedTree > ( );
+auto PrefixRankedBarTreeCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarTree > ( tree::PrefixRankedBarTree::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index 564a4c4bfdf743af15b0e4d094a829432b57f4b6..54b7ae7d3391bfaaa923078e8717444c3b18cc21 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -33,6 +33,7 @@ public:
 	explicit PrefixRankedBarTree ( alphabet::Symbol bar, std::set < alphabet::RankedSymbol > alphabet, std::vector < alphabet::RankedSymbol > data );
 	explicit PrefixRankedBarTree ( alphabet::Symbol bar, std::vector < alphabet::RankedSymbol > data );
 	explicit PrefixRankedBarTree ( alphabet::Symbol bar, const RankedTree & tree );
+	explicit PrefixRankedBarTree ( const RankedTree & tree );
 
 	void toPrefixRankedBar ( const RankedNode & node );
 
diff --git a/alib2data/src/tree/ranked/RankedPattern.cpp b/alib2data/src/tree/ranked/RankedPattern.cpp
index 2722335ead345fd520eafbbd0304196ff42ff4d1..55fa2dbd639d949ec002ba29d4687cb8e78082f5 100644
--- a/alib2data/src/tree/ranked/RankedPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedPattern.cpp
@@ -20,6 +20,7 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
 
 namespace tree {
 
@@ -168,4 +169,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::RankedPattern > rankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::RankedPattern > ( tree::RankedPattern::XML_TAG_NAME, tree::RankedPattern::parse );
 xmlApi < alib::Object >::ParserRegister < tree::RankedPattern > rankedPatternParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::RankedPattern > ( tree::RankedPattern::XML_TAG_NAME, tree::RankedPattern::parse );
 
+auto RankedPatternFromUnrankedPattern = castApi::CastRegister < tree::RankedPattern, tree::UnrankedPattern > ( );
+auto RankedPatternCastBinder = castApi::CastPoolStringBinder < tree::RankedPattern > ( tree::RankedPattern::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp
index ad734dfb2b79be00033745608175300ae3d60929..274316be1def4941aecf79b11058a5b4c8db6514 100644
--- a/alib2data/src/tree/ranked/RankedTree.cpp
+++ b/alib2data/src/tree/ranked/RankedTree.cpp
@@ -20,6 +20,7 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
 
 namespace tree {
 
@@ -159,4 +160,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::RankedTree > rankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::RankedTree > ( tree::RankedTree::XML_TAG_NAME, tree::RankedTree::parse );
 xmlApi < alib::Object >::ParserRegister < tree::RankedTree > rankedTreeParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::RankedTree > ( tree::RankedTree::XML_TAG_NAME, tree::RankedTree::parse );
 
+auto RankedTreeFromUnrankedTree = castApi::CastRegister < tree::RankedTree, tree::UnrankedTree > ( );
+auto RankedTreeCastBinder = castApi::CastPoolStringBinder < tree::RankedTree > ( tree::RankedTree::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.cpp b/alib2data/src/tree/unranked/UnrankedPattern.cpp
index 4ca331c008b5c5f2e46b458f244282b3bc3085ed..166bbd4a1e75f9aa9e1bae1fb6082615d44f09dd 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedPattern.cpp
@@ -20,6 +20,7 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
 
 namespace tree {
 
@@ -168,4 +169,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::UnrankedPattern > unrankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedPattern > ( tree::UnrankedPattern::XML_TAG_NAME, tree::UnrankedPattern::parse );
 xmlApi < alib::Object >::ParserRegister < tree::UnrankedPattern > unrankedPatternParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedPattern > ( tree::UnrankedPattern::XML_TAG_NAME, tree::UnrankedPattern::parse );
 
+auto UnrankedPatternFromRankedPattern = castApi::CastRegister < tree::UnrankedPattern, tree::RankedPattern > ( );
+auto UnrankedPatternCastBinder = castApi::CastPoolStringBinder < tree::UnrankedPattern > ( tree::UnrankedPattern::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/UnrankedTree.cpp b/alib2data/src/tree/unranked/UnrankedTree.cpp
index 7b49c3cf8eddff08cc284d44464982c9ae1868a3..a8e4686bffe1f08644e9ed0da9676e9912d2f079 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.cpp
+++ b/alib2data/src/tree/unranked/UnrankedTree.cpp
@@ -20,6 +20,7 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
 
 namespace tree {
 
@@ -159,4 +160,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::UnrankedTree > unrankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedTree > ( tree::UnrankedTree::XML_TAG_NAME, tree::UnrankedTree::parse );
 xmlApi < alib::Object >::ParserRegister < tree::UnrankedTree > unrankedTreeParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedTree > ( tree::UnrankedTree::XML_TAG_NAME, tree::UnrankedTree::parse );
 
+auto UnrankedTreeFromRankedTree = castApi::CastRegister < tree::UnrankedTree, tree::RankedTree > ( );
+auto UnrankedTreeCastBinder = castApi::CastPoolStringBinder < tree::UnrankedTree > ( tree::UnrankedTree::XML_TAG_NAME );
+
 } /* namespace alib */