diff --git a/limereport/lrvariablesholder.cpp b/limereport/lrvariablesholder.cpp
index b9a92ea..ed98f83 100644
--- a/limereport/lrvariablesholder.cpp
+++ b/limereport/lrvariablesholder.cpp
@@ -59,7 +59,7 @@ void VariablesHolder::addVariable(const QString& name, const QVariant& value, Va
         varValue->setVarType(type);
         varValue->setRenderPass(pass);
         m_varNames.insert(name,varValue);
-        if (type==VarDesc::User)
+        if (type==VarDesc::Report)
             m_userVariables.append(varValue);
     } else {
         throw ReportError(tr("variable with name ")+name+tr(" already exists !!"));
diff --git a/limereport/serializators/lrxmlbasetypesserializators.cpp b/limereport/serializators/lrxmlbasetypesserializators.cpp
index 3cc6543..ac82079 100644
--- a/limereport/serializators/lrxmlbasetypesserializators.cpp
+++ b/limereport/serializators/lrxmlbasetypesserializators.cpp
@@ -76,6 +76,10 @@ LimeReport::SerializatorIntf* createQByteArraySerializator(QDomDocument *doc, QD
     return new LimeReport::XmlQByteArraySerializator(doc,node);
 }
 
+LimeReport::SerializatorIntf* createQVariantSerializator(QDomDocument *doc, QDomElement *node){
+    return new LimeReport::XmlQVariantSerializator(doc,node);
+}
+
 bool registredQString = LimeReport::XMLAbstractSerializatorFactory::instance().registerCreator("QString", createQStringSerializator);
 bool registredInt = LimeReport::XMLAbstractSerializatorFactory::instance().registerCreator("int", createIntSerializator);
 bool registredEnumAndFlags = LimeReport::XMLAbstractSerializatorFactory::instance().registerCreator("enumAndFlags",createEnumAndFlagsSerializator);
@@ -87,6 +91,7 @@ bool registredQReal = LimeReport::XMLAbstractSerializatorFactory::instance().reg
 bool registerDouble = LimeReport::XMLAbstractSerializatorFactory::instance().registerCreator("double", createQRealSerializator);
 bool registerQColor = LimeReport::XMLAbstractSerializatorFactory::instance().registerCreator("QColor", createQColorSerializator);
 bool registerQByteArray = LimeReport::XMLAbstractSerializatorFactory::instance().registerCreator("QByteArray", createQByteArraySerializator);
+bool registerQVariant = LimeReport::XMLAbstractSerializatorFactory::instance().registerCreator("QVariant", createQVariantSerializator);
 
 }
 
@@ -275,6 +280,21 @@ QVariant XmlQByteArraySerializator::loadValue()
     return QByteArray::fromBase64(ba);
 }
 
+void XmlQVariantSerializator::save(const QVariant &value, QString name)
+{
+    QDomElement _node = doc()->createElement(name);
+    _node.setAttribute("Type","QVariant");
+    _node.setAttribute("Value",QString(value.toByteArray().toBase64()));
+    node()->appendChild(_node);
+}
+
+QVariant XmlQVariantSerializator::loadValue()
+{
+    QByteArray ba;
+    ba.append(node()->attribute("Value").toLatin1());
+    return QByteArray::fromBase64(ba);
+}
+
 
 
 }
diff --git a/limereport/serializators/lrxmlbasetypesserializators.h b/limereport/serializators/lrxmlbasetypesserializators.h
index 18dfb81..70bd40d 100644
--- a/limereport/serializators/lrxmlbasetypesserializators.h
+++ b/limereport/serializators/lrxmlbasetypesserializators.h
@@ -137,5 +137,14 @@ private:
     virtual QVariant loadValue();
 };
 
+class XmlQVariantSerializator : public XmlBaseSerializator
+{
+public:
+    XmlQVariantSerializator(QDomDocument *doc, QDomElement *node):XmlBaseSerializator(doc,node){}
+private:
+    virtual void save(const QVariant &value, QString name);
+    virtual QVariant loadValue();
+};
+
 }
 #endif // LRXMLBASETYPESSERIALIZATORS_H
diff --git a/limereport/serializators/lrxmlwriter.cpp b/limereport/serializators/lrxmlwriter.cpp
index dc70216..1a6e68a 100644
--- a/limereport/serializators/lrxmlwriter.cpp
+++ b/limereport/serializators/lrxmlwriter.cpp
@@ -125,8 +125,13 @@ QDomElement XMLWriter::putQObjectItem(QString name, QObject *item)
 
 void XMLWriter::saveProperty(QString name, QObject* item, QDomElement *node)
 {
-    CreateSerializator creator=0;
+    QString typeName;
+    if (name.compare("itemIndexMethod")==0)
+        typeName = item->metaObject()->property(item->metaObject()->indexOfProperty(name.toLatin1())).typeName();
+    else
+        typeName = item->property(name.toLatin1()).typeName();
 
+    CreateSerializator creator=0;
     if (isCollection(name,item)) { saveCollection(name,item,node); return;}
     if (isQObject(name,item)) {
         if (qvariant_cast<QObject *>(item->property(name.toLatin1())))
@@ -143,12 +148,10 @@ void XMLWriter::saveProperty(QString name, QObject* item, QDomElement *node)
                 );
     else
     try {
-        creator=XMLAbstractSerializatorFactory::instance().objectCreator(
-                    item->metaObject()->property(item->metaObject()->indexOfProperty(name.toLatin1())).typeName()
-                    );
+        creator=XMLAbstractSerializatorFactory::instance().objectCreator(typeName);
     } catch (LimeReport::ReportError &exception){
         qDebug()<<"class name ="<<item->metaObject()->className()
-               <<"property name="<<name<<" property type="<<item->property(name.toLatin1()).typeName()
+               <<"property name="<<name<<" property type="<<typeName
                <<exception.what();
 
     }