diff --git a/src/shared/proparser/proitems.cpp b/src/shared/proparser/proitems.cpp
index 613ed12dcc564b7f3335697ef5817d75d47de8d2..236ed5070acdc4dbc97b660bf22a5be8d2748d3d 100644
--- a/src/shared/proparser/proitems.cpp
+++ b/src/shared/proparser/proitems.cpp
@@ -34,6 +34,7 @@
 QT_BEGIN_NAMESPACE
 
 ProBlock::ProBlock()
+    : ProItem(BlockKind)
 {
     m_blockKind = 0;
     m_refCount = 1;
@@ -48,32 +49,6 @@ ProBlock::~ProBlock()
             delete itm;
 }
 
-ProItem::ProItemKind ProBlock::kind() const
-{
-    return ProItem::BlockKind;
-}
-
-ProItem::ProItemKind ProVariable::kind() const
-{
-    return ProItem::VariableKind;
-}
-
-ProItem::ProItemKind ProFunction::kind() const
-{
-    return ProItem::FunctionKind;
-}
-
-ProItem::ProItemKind ProCondition::kind() const
-{
-    return ProItem::ConditionKind;
-}
-
-ProItem::ProItemKind ProOperator::kind() const
-{
-    return ProItem::OperatorKind;
-}
-
-// --------------- ProFile ----------------
 ProFile::ProFile(const QString &fileName)
     : ProBlock()
 {
diff --git a/src/shared/proparser/proitems.h b/src/shared/proparser/proitems.h
index ab916b2bf4f2d3c0624bbcfe1926ccd6d901605a..b55933dce2b17484234af1f9fcee64552d99ec7b 100644
--- a/src/shared/proparser/proitems.h
+++ b/src/shared/proparser/proitems.h
@@ -56,15 +56,15 @@ public:
         ReturnReturn
    };
 
-    ProItem() : m_lineNumber(0) {}
-    virtual ~ProItem() {}
+    ProItem(ProItemKind kind) : m_kind(kind), m_lineNumber(0) {}
 
-    virtual ProItemKind kind() const = 0;
+    ProItemKind kind() const { return m_kind; }
 
     int lineNumber() const { return m_lineNumber; }
     void setLineNumber(int lineNumber) { m_lineNumber = lineNumber; }
 
 private:
+    ProItemKind m_kind;
     int m_lineNumber;
 };
 
@@ -91,8 +91,6 @@ public:
     void ref() { ++m_refCount; }
     void deref() { if (!--m_refCount) delete this; }
 
-    ProItem::ProItemKind kind() const;
-
 private:
     QList<ProItem *> m_proitems;
     int m_blockKind;
@@ -110,7 +108,7 @@ public:
         UniqueAddOperator   = 4
     };
 
-    ProVariable(const QString &name) : m_variableKind(SetOperator), m_variable(name) {}
+    ProVariable(const QString &name) : ProItem(VariableKind), m_variableKind(SetOperator), m_variable(name) {}
     void setVariableOperator(VariableOperator variableKind) { m_variableKind = variableKind; }
     VariableOperator variableOperator() const { return m_variableKind; }
     void setVariable(const QString &name) { m_variable = name; }
@@ -118,8 +116,6 @@ public:
     void setValue(const QString &value) { m_value = value; }
     QString value() const { return m_value; }
 
-    ProItem::ProItemKind kind() const;
-
 private:
     VariableOperator m_variableKind;
     QString m_variable;
@@ -129,12 +125,10 @@ private:
 class ProFunction : public ProItem
 {
 public:
-    explicit ProFunction(const QString &text) : m_text(text) {}
+    explicit ProFunction(const QString &text) : ProItem(FunctionKind), m_text(text) {}
     void setText(const QString &text) { m_text = text; }
     QString text() const { return m_text; }
 
-    ProItem::ProItemKind kind() const;
-
 private:
     QString m_text;
 };
@@ -142,12 +136,10 @@ private:
 class ProCondition : public ProItem
 {
 public:
-    explicit ProCondition(const QString &text) : m_text(text) {}
+    explicit ProCondition(const QString &text) : ProItem(ConditionKind), m_text(text) {}
     void setText(const QString &text) { m_text = text; }
     QString text() const { return m_text; }
 
-    ProItem::ProItemKind kind() const;
-
 private:
     QString m_text;
 };
@@ -160,12 +152,10 @@ public:
         NotOperator     = 2
     };
 
-    explicit ProOperator(OperatorKind operatorKind) : m_operatorKind(operatorKind) {}
+    explicit ProOperator(OperatorKind operatorKind) : ProItem(ProItem::OperatorKind), m_operatorKind(operatorKind) {}
     void setOperatorKind(OperatorKind operatorKind) { m_operatorKind = operatorKind; }
     OperatorKind operatorKind() const { return m_operatorKind; }
 
-    ProItem::ProItemKind kind() const;
-
 private:
     OperatorKind m_operatorKind;
 };