diff --git a/src/shared/proparser/abstractproitemvisitor.h b/src/shared/proparser/abstractproitemvisitor.h
deleted file mode 100644
index 18b7f535edd614e3a2908602fa230ba436898eb5..0000000000000000000000000000000000000000
--- a/src/shared/proparser/abstractproitemvisitor.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** Commercial Usage
-**
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** GNU Lesser General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at http://qt.nokia.com/contact.
-**
-**************************************************************************/
-
-#ifndef ABSTRACTPROITEMVISITOR
-#define ABSTRACTPROITEMVISITOR
-
-#include "proitems.h"
-
-QT_BEGIN_NAMESPACE
-
-struct AbstractProItemVisitor
-{
-    virtual ~AbstractProItemVisitor() {}
-
-    virtual ProItem::ProItemReturn visitBeginProBlock(ProBlock *block) = 0;
-    virtual void visitEndProBlock(ProBlock *block) = 0;
-
-    virtual ProItem::ProItemReturn visitProLoopIteration() = 0;
-    virtual void visitProLoopCleanup() = 0;
-
-    virtual ProItem::ProItemReturn visitBeginProFile(ProFile *value) = 0;
-    virtual ProItem::ProItemReturn visitEndProFile(ProFile *value) = 0;
-
-    virtual void visitProVariable(ProVariable *variable) = 0;
-    virtual ProItem::ProItemReturn visitProFunction(ProFunction *function) = 0;
-    virtual void visitProOperator(ProOperator *function) = 0;
-    virtual void visitProCondition(ProCondition *function) = 0;
-};
-
-QT_END_NAMESPACE
-
-#endif // ABSTRACTPROITEMVISITOR
-
diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp
index ff31a48e1b88c83356ec46f828ced6e109bb003f..8301832971f72dfe438d137c56b7edb9065d8fd2 100644
--- a/src/shared/proparser/profileevaluator.cpp
+++ b/src/shared/proparser/profileevaluator.cpp
@@ -180,7 +180,7 @@ QString ProFileOption::field_sep;
 //
 ///////////////////////////////////////////////////////////////////////
 
-class ProFileEvaluator::Private : public AbstractProItemVisitor
+class ProFileEvaluator::Private
 {
 public:
     Private(ProFileEvaluator *q_, ProFileOption *option);
@@ -210,13 +210,11 @@ public:
 
     /////////////// Evaluating pro file contents
 
-    // implementation of AbstractProItemVisitor
-    ProItem::ProItemReturn visitBeginProBlock(ProBlock *block);
-    void visitEndProBlock(ProBlock *block);
+    ProItem::ProItemReturn visitProFile(ProFile *pro);
+    ProItem::ProItemReturn visitProBlock(ProBlock *block);
+    ProItem::ProItemReturn visitProItem(ProItem *item);
     ProItem::ProItemReturn visitProLoopIteration();
     void visitProLoopCleanup();
-    ProItem::ProItemReturn visitBeginProFile(ProFile *value);
-    ProItem::ProItemReturn visitEndProFile(ProFile *value);
     void visitProVariable(ProVariable *variable);
     ProItem::ProItemReturn visitProFunction(ProFunction *function);
     void visitProOperator(ProOperator *oper);
@@ -812,7 +810,27 @@ static QString fixPathToLocalOS(const QString &str)
 
 //////// Evaluator /////////
 
-ProItem::ProItemReturn ProFileEvaluator::Private::visitBeginProBlock(ProBlock *block)
+ProItem::ProItemReturn ProFileEvaluator::Private::visitProItem(ProItem *item)
+{
+    switch (item->kind()) {
+    case ProItem::BlockKind: // This is never a ProFile
+        return visitProBlock(static_cast<ProBlock*>(item));
+    case ProItem::VariableKind:
+        visitProVariable(static_cast<ProVariable*>(item));
+        break;
+    case ProItem::ConditionKind:
+        visitProCondition(static_cast<ProCondition*>(item));
+        break;
+    case ProItem::FunctionKind:
+        return visitProFunction(static_cast<ProFunction*>(item));
+    case ProItem::OperatorKind:
+        visitProOperator(static_cast<ProOperator*>(item));
+        break;
+    }
+    return ProItem::ReturnTrue;
+}
+
+ProItem::ProItemReturn ProFileEvaluator::Private::visitProBlock(ProBlock *block)
 {
     if (block->blockKind() & ProBlock::ScopeContentsKind) {
         if (!m_definingFunc.isEmpty()) {
@@ -827,7 +845,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::visitBeginProBlock(ProBlock *b
                 block->setBlockKind(block->blockKind() | ProBlock::FunctionBodyKind);
             }
             m_definingFunc.clear();
-            return ProItem::ReturnSkip;
+            return ProItem::ReturnTrue;
         } else if (!(block->blockKind() & ProBlock::FunctionBodyKind)) {
             if (!m_sts.condition) {
                 if (m_skipLevel || m_hadCondition)
@@ -847,11 +865,32 @@ ProItem::ProItemReturn ProFileEvaluator::Private::visitBeginProBlock(ProBlock *b
             Q_ASSERT(!m_sts.condition);
         }
     }
-    return ProItem::ReturnTrue;
-}
-
-void ProFileEvaluator::Private::visitEndProBlock(ProBlock *block)
-{
+    ProItem::ProItemReturn rt = ProItem::ReturnTrue;
+    QList<ProItem *> items = block->items();
+    for (int i = 0; i < items.count(); ++i) {
+        rt = visitProItem(items.at(i));
+        if (rt != ProItem::ReturnTrue && rt != ProItem::ReturnFalse) {
+            if (rt == ProItem::ReturnLoop) {
+                rt = ProItem::ReturnTrue;
+                while (visitProLoopIteration())
+                    for (int j = i; ++j < items.count(); ) {
+                        rt = visitProItem(items.at(j));
+                        if (rt != ProItem::ReturnTrue && rt != ProItem::ReturnFalse) {
+                            if (rt == ProItem::ReturnNext) {
+                                rt = ProItem::ReturnTrue;
+                                break;
+                            }
+                            if (rt == ProItem::ReturnBreak)
+                                rt = ProItem::ReturnTrue;
+                            goto do_break;
+                        }
+                    }
+              do_break:
+                visitProLoopCleanup();
+            }
+            break;
+        }
+    }
     if ((block->blockKind() & ProBlock::ScopeContentsKind)
         && !(block->blockKind() & ProBlock::FunctionBodyKind)) {
         if (m_skipLevel) {
@@ -863,6 +902,7 @@ void ProFileEvaluator::Private::visitEndProBlock(ProBlock *block)
             m_sts.condition = true;
         }
     }
+    return rt;
 }
 
 ProItem::ProItemReturn ProFileEvaluator::Private::visitProLoopIteration()
@@ -1001,7 +1041,7 @@ void ProFileEvaluator::Private::visitProCondition(ProCondition *cond)
     m_invertNext = false;
 }
 
-ProItem::ProItemReturn ProFileEvaluator::Private::visitBeginProFile(ProFile * pro)
+ProItem::ProItemReturn ProFileEvaluator::Private::visitProFile(ProFile *pro)
 {
     m_lineNo = pro->lineNumber();
 
@@ -1124,11 +1164,8 @@ ProItem::ProItemReturn ProFileEvaluator::Private::visitBeginProFile(ProFile * pr
         }
     }
 
-    return ProItem::ReturnTrue;
-}
+    visitProBlock(pro);
 
-ProItem::ProItemReturn ProFileEvaluator::Private::visitEndProFile(ProFile * pro)
-{
     m_lineNo = pro->lineNumber();
 
     if (m_profileStack.count() == 1) {
@@ -1668,7 +1705,7 @@ QStringList ProFileEvaluator::Private::evaluateFunction(
             m_valuemap[QString::number(i+1)] = argumentsList[i];
         }
         m_valuemap[QLatin1String("ARGS")] = args;
-        oki = (funcPtr->Accept(this) != ProItem::ReturnFalse); // True || Return
+        oki = (visitProBlock(funcPtr) != ProItem::ReturnFalse); // True || Return
         ret = m_returnValue;
         m_returnValue.clear();
 
@@ -2237,7 +2274,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
                     delete pro;
                     return ProItem::ReturnFalse;
                 }
-                bool ret = pro->Accept(this);
+                bool ret = visitProBlock(pro);
                 pro->deref();
                 return returnBool(ret);
             }
@@ -2813,7 +2850,7 @@ bool ProFileEvaluator::Private::evaluateFile(const QString &fileName)
         }
     if (ProFile *pro = parsedProFile(fileName, true)) {
         q->aboutToEval(pro);
-        bool ok = (pro->Accept(this) == ProItem::ReturnTrue);
+        bool ok = (visitProFile(pro) == ProItem::ReturnTrue);
         pro->deref();
         return ok;
     } else {
@@ -2869,7 +2906,7 @@ bool ProFileEvaluator::Private::evaluateFeatureFile(
         // The path is fully normalized already.
         bool ok = false;
         if (ProFile *pro = parsedProFile(fn, true)) {
-            ok = (pro->Accept(this) == ProItem::ReturnTrue);
+            ok = (visitProFile(pro) == ProItem::ReturnTrue);
             pro->deref();
         }
 
@@ -3039,7 +3076,7 @@ ProFile *ProFileEvaluator::parsedProFile(const QString &fileName, const QString
 
 bool ProFileEvaluator::accept(ProFile *pro)
 {
-    return pro->Accept(d);
+    return d->visitProFile(pro);
 }
 
 QString ProFileEvaluator::propertyValue(const QString &name) const
diff --git a/src/shared/proparser/profileevaluator.h b/src/shared/proparser/profileevaluator.h
index efe3af5e6f5ee22afa63fb89fb60ea22de40315d..c6ba33eb801dfe9158c4d0b783640d516029989e 100644
--- a/src/shared/proparser/profileevaluator.h
+++ b/src/shared/proparser/profileevaluator.h
@@ -31,7 +31,6 @@
 #define PROFILEEVALUATOR_H
 
 #include "proitems.h"
-#include "abstractproitemvisitor.h"
 
 #include <QtCore/QIODevice>
 #include <QtCore/QHash>
diff --git a/src/shared/proparser/proitems.cpp b/src/shared/proparser/proitems.cpp
index f39816a2b1029ecbc08656cac3b9cdc8bf98c0ae..09838f12fd858662a5066233d9bcdf2f44ec78ea 100644
--- a/src/shared/proparser/proitems.cpp
+++ b/src/shared/proparser/proitems.cpp
@@ -28,7 +28,6 @@
 **************************************************************************/
 
 #include "proitems.h"
-#include "abstractproitemvisitor.h"
 
 #include <QtCore/QFileInfo>
 
@@ -92,39 +91,6 @@ ProItem::ProItemKind ProBlock::kind() const
     return ProItem::BlockKind;
 }
 
-ProItem::ProItemReturn ProBlock::Accept(AbstractProItemVisitor *visitor)
-{
-    if (visitor->visitBeginProBlock(this) == ReturnSkip)
-        return ReturnTrue;
-    ProItemReturn rt = ReturnTrue;
-    for (int i = 0; i < m_proitems.count(); ++i) {
-        rt = m_proitems.at(i)->Accept(visitor);
-        if (rt != ReturnTrue && rt != ReturnFalse) {
-            if (rt == ReturnLoop) {
-                rt = ReturnTrue;
-                while (visitor->visitProLoopIteration())
-                    for (int j = i; ++j < m_proitems.count(); ) {
-                        rt = m_proitems.at(j)->Accept(visitor);
-                        if (rt != ReturnTrue && rt != ReturnFalse) {
-                            if (rt == ReturnNext) {
-                                rt = ReturnTrue;
-                                break;
-                            }
-                            if (rt == ReturnBreak)
-                                rt = ReturnTrue;
-                            goto do_break;
-                        }
-                    }
-              do_break:
-                visitor->visitProLoopCleanup();
-            }
-            break;
-        }
-    }
-    visitor->visitEndProBlock(this);
-    return rt;
-}
-
 // --------------- ProVariable ----------------
 ProVariable::ProVariable(const QString &name)
 {
@@ -167,12 +133,6 @@ ProItem::ProItemKind ProVariable::kind() const
     return ProItem::VariableKind;
 }
 
-ProItem::ProItemReturn ProVariable::Accept(AbstractProItemVisitor *visitor)
-{
-    visitor->visitProVariable(this);
-    return ReturnTrue;
-}
-
 // --------------- ProFunction ----------------
 ProFunction::ProFunction(const QString &text)
 {
@@ -194,11 +154,6 @@ ProItem::ProItemKind ProFunction::kind() const
     return ProItem::FunctionKind;
 }
 
-ProItem::ProItemReturn ProFunction::Accept(AbstractProItemVisitor *visitor)
-{
-    return visitor->visitProFunction(this);
-}
-
 // --------------- ProCondition ----------------
 ProCondition::ProCondition(const QString &text)
 {
@@ -220,12 +175,6 @@ ProItem::ProItemKind ProCondition::kind() const
     return ProItem::ConditionKind;
 }
 
-ProItem::ProItemReturn ProCondition::Accept(AbstractProItemVisitor *visitor)
-{
-    visitor->visitProCondition(this);
-    return ReturnTrue;
-}
-
 // --------------- ProOperator ----------------
 ProOperator::ProOperator(OperatorKind operatorKind)
 {
@@ -247,12 +196,6 @@ ProItem::ProItemKind ProOperator::kind() const
     return ProItem::OperatorKind;
 }
 
-ProItem::ProItemReturn ProOperator::Accept(AbstractProItemVisitor *visitor)
-{
-    visitor->visitProOperator(this);
-    return ReturnTrue;
-}
-
 // --------------- ProFile ----------------
 ProFile::ProFile(const QString &fileName)
     : ProBlock(0)
@@ -286,13 +229,4 @@ QString ProFile::directoryName() const
     return m_directoryName;
 }
 
-ProItem::ProItemReturn ProFile::Accept(AbstractProItemVisitor *visitor)
-{
-    ProItemReturn rt;
-    if ((rt = visitor->visitBeginProFile(this)) != ReturnTrue)
-        return rt;
-    ProBlock::Accept(visitor); // cannot fail
-    return visitor->visitEndProFile(this);
-}
-
 QT_END_NAMESPACE
diff --git a/src/shared/proparser/proitems.h b/src/shared/proparser/proitems.h
index 1611e6b9494c7f6d1f540e2c64737337c659afee..8130e1e3c38b84606de7f019e62364928bafd537 100644
--- a/src/shared/proparser/proitems.h
+++ b/src/shared/proparser/proitems.h
@@ -35,8 +35,6 @@
 
 QT_BEGIN_NAMESPACE
 
-struct AbstractProItemVisitor;
-
 class ProItem
 {
 public:
@@ -64,7 +62,6 @@ public:
 
     virtual ProItemKind kind() const = 0;
 
-    virtual ProItemReturn Accept(AbstractProItemVisitor *visitor) = 0;
     int lineNumber() const { return m_lineNumber; }
     void setLineNumber(int lineNumber) { m_lineNumber = lineNumber; }
 
@@ -102,11 +99,9 @@ public:
 
     ProItem::ProItemKind kind() const;
 
-    virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
-protected:
-    QList<ProItem *> m_proitems;
 private:
     ProBlock *m_parent;
+    QList<ProItem *> m_proitems;
     int m_blockKind;
     int m_refCount;
 };
@@ -135,7 +130,6 @@ public:
 
     ProItem::ProItemKind kind() const;
 
-    virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
 private:
     VariableOperator m_variableKind;
     QString m_variable;
@@ -152,7 +146,6 @@ public:
 
     ProItem::ProItemKind kind() const;
 
-    virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
 private:
     QString m_text;
 };
@@ -167,7 +160,6 @@ public:
 
     ProItem::ProItemKind kind() const;
 
-    virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
 private:
     QString m_text;
 };
@@ -187,7 +179,6 @@ public:
 
     ProItem::ProItemKind kind() const;
 
-    virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
 private:
     OperatorKind m_operatorKind;
 };
@@ -202,8 +193,6 @@ public:
     QString fileName() const;
     QString directoryName() const;
 
-    virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
-
 private:
     QString m_fileName;
     QString m_displayFileName;
diff --git a/src/shared/proparser/proparser.pri b/src/shared/proparser/proparser.pri
index 353f1cc18e70223af7375bd7954693c1f6df7ead..8c8b4d8eeffb8730a76e646c62c77fc8a122cdbc 100644
--- a/src/shared/proparser/proparser.pri
+++ b/src/shared/proparser/proparser.pri
@@ -6,7 +6,6 @@ DEPENDPATH *= $$PWD $$PWD/..
 
 # Input
 HEADERS += \
-        abstractproitemvisitor.h \
         profileevaluator.h \
         proitems.h \
         prowriter.h \
diff --git a/tests/manual/proparser/testreader.pro b/tests/manual/proparser/testreader.pro
index 794d1ba10d37b392acc370eadbdfc9fc4c7ba45a..83893560e81e82de45f174e7ba9359b36e0e5ba2 100644
--- a/tests/manual/proparser/testreader.pro
+++ b/tests/manual/proparser/testreader.pro
@@ -15,6 +15,6 @@ build_all:!build_pass {
 }
 
 SOURCES = main.cpp profileevaluator.cpp proitems.cpp ioutils.cpp
-HEADERS = profileevaluator.h proitems.h abstractproitemvisitor.h ioutils.h
+HEADERS = profileevaluator.h proitems.h ioutils.h
 
 DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII