diff --git a/alib2data/src/Api.hpp b/alib2data/src/Api.hpp
index bb6db4492319896ff0fc689e6cdc663c76dc6f9c..59bc6e0c43e4a57a685a3519e1e00be3ddf2a061 100644
--- a/alib2data/src/Api.hpp
+++ b/alib2data/src/Api.hpp
@@ -167,6 +167,15 @@ struct api<container::ObjectsMap> {
 	static std::list<sax::Token> compose(const container::ObjectsMap& data);
 };
 
+/* TODO for gcc-4.9 uncomment
+template<typename ... Ts>
+struct api<std::variant<Ts...>> {
+	static std::variant<Ts...> parse(std::list<sax::Token>& input);
+	static bool first(const std::list<sax::Token>& input);
+	static std::list<sax::Token> compose(const std::variant<Ts...>& data);
+};
+*/
+
 
 template<>
 struct api<Object> {
@@ -806,6 +815,23 @@ std::list<sax::Token> api<std::map<T, R>>::compose(const std::map<T, R>& input)
 	return ToXMLComposers::containerComposer.compose<T, R>(input);
 }
 
+/* TODO For gcc-4.9 uncomment
+template<typename ... Ts>
+std::variant<Ts...> api<std::variant<Ts...>>::parse(std::list<sax::Token>& input) {
+	return FromXMLParsers::containerParser.parseVariant<Ts...>(input);
+}
+
+template<typename ... Ts>
+bool api<std::variant<Ts...>>::first(const std::list<sax::Token>& input) {
+	return true;
+}
+
+template<typename ... Ts>
+std::list<sax::Token> api<std::variant<Ts...>>::compose(const std::variant<Ts...>& input) {
+	return ToXMLComposers::containerComposer.compose<Ts...>(input);
+}
+*/
+
 } /* namespace alib */
 
 #endif /* FROM_XML_PARSERS_HPP_ */
diff --git a/alib2data/src/container/ContainerFromXMLParser.hpp b/alib2data/src/container/ContainerFromXMLParser.hpp
index d59a7146b3c08b1e3193a5e8e69a809d39809d61..3c1c7b6433dc2fb9fb0c703338c9dcf9bee6fa8c 100644
--- a/alib2data/src/container/ContainerFromXMLParser.hpp
+++ b/alib2data/src/container/ContainerFromXMLParser.hpp
@@ -8,15 +8,18 @@
 #ifndef CONTAINER_FROM_XML_PARSER_H_
 #define CONTAINER_FROM_XML_PARSER_H_
 
+#include "../std/variant.hpp"
 #include "../sax/FromXMLParserHelper.h"
 #include "ContainerFeatures.h"
 
+#include "../object/Object.h"
 #include "ObjectsSet.h"
 #include "ObjectsVector.h"
 #include "ObjectsPair.h"
 #include "ObjectsMap.h"
 
 #include "Container.h"
+#include "../exception/AlibException.h"
 
 namespace alib {
 
@@ -54,6 +57,9 @@ class ContainerFromXMLParser : public sax::FromXMLParserHelper {
 
 	ObjectsMap parseObjectsMap(std::list<sax::Token>& input) const;
 
+	template<typename ... Ts>
+	std::variant<Ts...> parseVariant(std::list<sax::Token>& input) const;
+
 	template<typename T> friend class alib::api;
 
 public:
@@ -119,6 +125,24 @@ std::map<T, R> ContainerFromXMLParser::parseMap(std::list<sax::Token>& input) co
 	return map;
 }
 
+/* TODO for gcc-4.9 uncoment this
+template<typename T>
+T parseVariantHelper(std::list<sax::Token>&) {
+	throw exception::AlibException("Can't parse variant type");
+}
+
+template<typename T, typename R, typename ... Ts>
+T parseVariantHelper(std::list<sax::Token>& input) {
+	if(alib::api<R>::first(input)) return T(alib::api<R>::parse(input));
+	return parseVariantHelper<T, Ts...>(input);
+}
+
+template<typename ... Ts>
+std::variant<Ts...> ContainerFromXMLParser::parseVariant(std::list<sax::Token>& input) const {
+	return parseVariantHelper<std::variant<Ts...>, Ts...>(input);
+}
+*/
+
 } /* namespace container */
 
 #endif /* CONTAINER_FROM_XML_PARSER_H_ */
diff --git a/alib2data/src/container/ContainerToXMLComposer.hpp b/alib2data/src/container/ContainerToXMLComposer.hpp
index 34de226b2bf6b7eb258daac3feac9b0740bd2994..83bf6432bf31570b0e4cdca58879a16a27763e69 100644
--- a/alib2data/src/container/ContainerToXMLComposer.hpp
+++ b/alib2data/src/container/ContainerToXMLComposer.hpp
@@ -9,6 +9,7 @@
 #define CONTAINER_TO_XML_COMPOSER_H_
 
 #include <list>
+#include "../std/variant.hpp"
 #include "../sax/Token.h"
 
 #include "Container.h"
@@ -63,6 +64,9 @@ class ContainerToXMLComposer {
 
 	std::list<sax::Token> compose(const ObjectsMap& container) const;
 
+	template<typename ... Ts>
+	std::list<sax::Token> compose(const std::variant<Ts...>& container) const;
+
 	template<typename T> friend class alib::api;
 };
 
@@ -123,6 +127,24 @@ std::list<sax::Token> ContainerToXMLComposer::compose(const std::map<T, R>& cont
 	return out;
 }
 
+/* TODO for gcc-4.9 uncomment
+template<typename T>
+std::list<sax::Token> composeVariantHelper(const T&) {
+	throw exception::AlibException("Can't compose variant type");
+}
+
+template<typename T, typename R, typename ... Ts>
+std::list<sax::Token> composeVariantHelper(const T& container) {
+	if(container.template is<R>()) return alib::api<R>::compose(container.template get<R>());
+	return composeVariantHelper<T, Ts...>(container);
+}
+
+template<typename ... Ts>
+std::list<sax::Token> ContainerToXMLComposer::compose(const std::variant<Ts...>& container) const {
+	return composeVariantHelper<std::variant<Ts...>, Ts...>(container);
+}
+*/
+
 } /* namespace container */
 
 #endif /* CONTAINER_TO_XML_COMPOSER_H_ */
diff --git a/alib2data/test-src/container/ContainerTest.cpp b/alib2data/test-src/container/ContainerTest.cpp
index 3058921fb712da6f5ee7e2285cd0a76f406288f5..5ee70520698da5748a9306a9de8f53a356b3ba22 100644
--- a/alib2data/test-src/container/ContainerTest.cpp
+++ b/alib2data/test-src/container/ContainerTest.cpp
@@ -43,3 +43,19 @@ void ContainerTest::testXMLParser() {
 	}
 }
 
+/* TODO for gcc-4.9 uncomment
+void ContainerTest::testVariantParsing() {
+	{
+		std::string string = "<String>aaa</String>";
+		std::variant<int, std::string> object = alib::DataFactory::fromString<std::variant<int, std::string>>(string);
+
+		CPPUNIT_ASSERT( "aaa" == object.get<std::string>());
+
+		std::string string2 = alib::DataFactory::toString(object);
+
+		std::variant<int, std::string> object2 = alib::DataFactory::fromString<std::variant<int, std::string>>(string2);
+
+		CPPUNIT_ASSERT( object == object2 );
+	}
+}
+*/
diff --git a/alib2data/test-src/container/ContainerTest.h b/alib2data/test-src/container/ContainerTest.h
index 4a210d5c5f17a25772a13fbc88dc6076c401e867..84e68b835a69d463dd464a0411c43f7e58356902 100644
--- a/alib2data/test-src/container/ContainerTest.h
+++ b/alib2data/test-src/container/ContainerTest.h
@@ -7,6 +7,9 @@ class ContainerTest : public CppUnit::TestFixture
 {
 	CPPUNIT_TEST_SUITE( ContainerTest );
 	CPPUNIT_TEST( testXMLParser );
+/* TODO for gcc-4.9 uncomment
+	CPPUNIT_TEST( testVariantParsing );
+*/
 	CPPUNIT_TEST_SUITE_END();
 
 public:
@@ -14,6 +17,9 @@ public:
 	void tearDown();
 
 	void testXMLParser();
+/* TODO for gcc-4.9 uncomment
+	void testVariantParsing();
+*/
 };
 
 #endif	// CONTAINER_TEST_H_