diff --git a/alib2xml/src/container/xml/ObjectsMultimap.cpp b/alib2xml/src/container/xml/ObjectsMultimap.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..eb745fb05646603c27a29a19e5dce0e86d3179f9
--- /dev/null
+++ b/alib2xml/src/container/xml/ObjectsMultimap.cpp
@@ -0,0 +1,19 @@
+/*
+ * Multimap.cpp
+ *
+ * Created on: Apr 1, 2013
+ * Author: Jan Travnicek
+ */
+
+#include "ObjectsMultimap.h"
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < ext::multimap < object::Object, object::Object > > ( );
+static auto xmlRead = registration::XmlReaderRegister < ext::multimap < object::Object, object::Object > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, ext::multimap < object::Object, object::Object > > ( );
+
+} /* namespace */
diff --git a/alib2xml/src/container/xml/ObjectsMultimap.h b/alib2xml/src/container/xml/ObjectsMultimap.h
new file mode 100644
index 0000000000000000000000000000000000000000..5c00af552785132a5f4bfce5bc2d39d18459f71b
--- /dev/null
+++ b/alib2xml/src/container/xml/ObjectsMultimap.h
@@ -0,0 +1,60 @@
+/*
+ * Multimap.h
+ *
+ * Created on: Apr 1, 2013
+ * Author: Jan Travnicek
+ */
+
+#ifndef _XML_OBJECTS_MULTIMAP_H_
+#define _XML_OBJECTS_MULTIMAP_H_
+
+#include <alib/multimap>
+#include <core/xmlApi.hpp>
+#include <container/xml/ObjectsPair.h>
+
+namespace core {
+
+template < typename T, typename R >
+struct xmlApi < ext::multimap < T, R > > {
+	static ext::multimap < T, R > parse ( ext::deque < sax::Token >::iterator & input );
+	static bool first ( const ext::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
+	static void compose ( ext::deque < sax::Token > & output, const ext::multimap < T, R > & data );
+};
+
+template < typename T, typename R >
+ext::multimap < T, R > xmlApi < ext::multimap < T, R > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+
+	ext::multimap < T, R > multimap;
+
+	while ( sax::FromXMLParserHelper::isTokenType ( input, sax::Token::TokenType::START_ELEMENT ) )
+		multimap.insert ( core::xmlApi < ext::pair < T, R > >::parse ( input ) );
+
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+	return multimap;
+}
+
+template < typename T, typename R >
+bool xmlApi < ext::multimap < T, R > >::first ( const ext::deque < sax::Token >::const_iterator & input ) {
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+}
+
+template < typename T, typename R >
+std::string xmlApi < ext::multimap < T, R > >::xmlTagName ( ) {
+	return "Multimap";
+}
+
+template < typename T, typename R >
+void xmlApi < ext::multimap < T, R > >::compose ( ext::deque < sax::Token > & output, const ext::multimap < T, R > & input ) {
+	output.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+
+	for ( const std::pair < const T, R > & item : input )
+		core::xmlApi < std::pair < const T, R > >::compose ( output, item );
+
+	output.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_OBJECTS_MULTIMAP_H_ */