diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp
index c883ba835ee74faf7b4bc26385e98e77b8542e12..5f733482830990e576f1502915786f22252fb765 100644
--- a/src/shared/proparser/profileevaluator.cpp
+++ b/src/shared/proparser/profileevaluator.cpp
@@ -200,6 +200,7 @@ public:
     };
 
     bool read(ProFile *pro);
+    bool read(ProFile *pro, const QString &content);
     bool read(ProBlock *pro, const QString &content);
     bool readInternal(ProBlock *pro, const QString &content, ushort *buf);
 
@@ -554,14 +555,28 @@ bool ProFileEvaluator::Private::read(ProFile *pro)
     QString content(QString::fromLatin1(file.readAll())); // yes, really latin1
     file.close();
     m_lineNo = 1;
-    return readInternal(pro, content, (ushort*)content.data());
+    m_profileStack.push(pro);
+    bool ret = readInternal(pro, content, (ushort*)content.data());
+    m_profileStack.pop();
+    return ret;
 }
 
-bool ProFileEvaluator::Private::read(ProBlock *pro, const QString &content)
+bool ProFileEvaluator::Private::read(ProFile *pro, const QString &content)
 {
     QString buf;
     buf.reserve(content.size());
     m_lineNo = 1;
+    m_profileStack.push(pro);
+    bool ret = readInternal(pro, content, (ushort*)buf.data());
+    m_profileStack.pop();
+    return ret;
+}
+
+bool ProFileEvaluator::Private::read(ProBlock *pro, const QString &content)
+{
+    QString buf;
+    buf.reserve(content.size());
+    m_lineNo = 0;
     return readInternal(pro, content, (ushort*)buf.data());
 }