diff --git a/src/knowCore/ValueHash.cpp b/src/knowCore/ValueHash.cpp
index 34a6bd9b0589e0074342e8e1fc39bb66ce738dca..6d31a133a0e4a603639e7235099f62d53bd52e7c 100644
--- a/src/knowCore/ValueHash.cpp
+++ b/src/knowCore/ValueHash.cpp
@@ -197,6 +197,33 @@ ReturnValue<QString> ValueHash::printable() const
   return kCrvSuccess(clog_qt::qformat("[{}]", strings));
 }
 
+QVariantHash ValueHash::toVariantHash() const
+{
+  QVariantHash values;
+  QHash<QString, Value> values_ = hash();
+  for(auto it = values_.begin(); it != values_.end(); ++it)
+  {
+    values[it.key()] = it.value().toVariant();
+  }
+  return values;
+}
+
+QVariantMap ValueHash::toVariantMap() const
+{
+  QVariantMap values;
+  QHash<QString, Value> values_ = hash();
+  for(auto it = values_.begin(); it != values_.end(); ++it)
+  {
+    values[it.key()] = it.value().toVariant();
+  }
+  return values;
+}
+
+QVariant ValueHash::toVariant() const
+{
+  return toVariantHash();
+}
+
 QHash<QString, Value> ValueHash::hash() const
 {
   return d->values;
diff --git a/src/knowCore/ValueHash.h b/src/knowCore/ValueHash.h
index 5a35fbec29ec9487f875663e87919b21b9821e33..e8f7ef643977f4ce456d1b1d4f55ed71c38105ee 100644
--- a/src/knowCore/ValueHash.h
+++ b/src/knowCore/ValueHash.h
@@ -110,6 +110,15 @@ namespace knowCore
     ReturnValue<QCborValue> toCborValue(const SerialisationContexts& _contexts) const;
     static ReturnValue<ValueHash> fromCborValue(const QCborValue& _value, const DeserialisationContexts& _contexts);
     ReturnValue<QString> printable() const;
+    /**
+     * @return a variant hash representation
+     */
+    QVariantHash toVariantHash() const;
+    /**
+     * @return a variant map representation
+     */
+    QVariantMap toVariantMap() const;
+    QVariant toVariant() const;
     /**
      * Check that the list only contains value of type \ref _uri.
      * It returns success if that is true.
@@ -228,7 +237,7 @@ namespace knowCore
   inline ReturnValue<QHash<QString, _T_>> ValueHash::hash() const
   {
     QHash<QString, _T_> values;
-    QHash<QString, Value> values_;
+    QHash<QString, Value> values_ = hash();
     for(auto it = values_.begin(); it != values_.end(); ++it)
     {
       KNOWCORE_RETURN_VALUE_TRY(value, it.value().value<_T_>());
@@ -240,7 +249,7 @@ namespace knowCore
   inline ReturnValue<QMap<QString, _T_>> ValueHash::map() const
   {
     QMap<QString, _T_> values;
-    QHash<QString, Value> values_;
+    QHash<QString, Value> values_ = hash();
     for(auto it = values_.begin(); it != values_.end(); ++it)
     {
       KNOWCORE_RETURN_VALUE_TRY(value, it.value().value<_T_>());
@@ -251,7 +260,7 @@ namespace knowCore
   inline QMap<QString, Value> ValueHash::map() const
   {
     QMap<QString, Value> values;
-    QHash<QString, Value> values_;
+    QHash<QString, Value> values_ = hash();
     for(auto it = values_.begin(); it != values_.end(); ++it)
     {
       values[it.key()] = it.value();
diff --git a/src/knowCore/ValueList.cpp b/src/knowCore/ValueList.cpp
index c65c0cd5f1b24e31ac37b2b8503896be038f7fa4..cdc487d4d7d0f66b51814c9b6d6d57d3cfaeb556 100644
--- a/src/knowCore/ValueList.cpp
+++ b/src/knowCore/ValueList.cpp
@@ -208,6 +208,19 @@ ReturnValue<ValueList> ValueList::fromVariants(const QVariantList& _t)
   return kCrvSuccess(ValueList(values));
 }
 
+QVariantList ValueList::toVariantList() const
+{
+  QVariantList l;
+  std::transform(d->values.begin(), d->values.end(), std::back_inserter(l), [](const Value& v) { return v.toVariant(); });
+  return l;
+}
+
+QVariant ValueList::toVariant() const
+{
+  return toVariantList();
+}
+
+
 
 #include <knowCore/Uris/askcore_types.h>
 #include "MetaTypeImplementation.h"
diff --git a/src/knowCore/ValueList.h b/src/knowCore/ValueList.h
index 551af43e2f70cd5c7279c6fd07f75ddc6184d0c8..1da7b3efa7346b4264c266bf976e1994c1e3f2aa 100644
--- a/src/knowCore/ValueList.h
+++ b/src/knowCore/ValueList.h
@@ -70,6 +70,14 @@ namespace knowCore
     template<typename _T_>
     inline static const ValueList fromValues(const QList<_T_>& _t);
     static ReturnValue<ValueList> fromVariants(const QVariantList& _t);
+    /**
+     * @return a list of variant
+     */
+    QVariantList toVariantList() const;
+    /**
+     * @return a variant
+     */
+    QVariant toVariant() const;
   private:
     struct Private;
     QSharedDataPointer<Private> d;