diff --git a/src/shared/proparser/proitems.cpp b/src/shared/proparser/proitems.cpp
index 42c75b616d7d3ff620aaeb79e6a9c4b04c95875b..9916ebae9d1096627563dec2b7c567c9ea697c6c 100644
--- a/src/shared/proparser/proitems.cpp
+++ b/src/shared/proparser/proitems.cpp
@@ -45,10 +45,13 @@ ProBlock::~ProBlock()
 {
     for (ProItem *itm, *nitm = m_proitems; (itm = nitm); ) {
         nitm = itm->m_next;
-        if (itm->kind() == BlockKind)
-            static_cast<ProBlock *>(itm)->deref();
-        else
-            delete itm;
+        switch (itm->kind()) {
+        case BlockKind: static_cast<ProBlock *>(itm)->deref(); break;
+        case FunctionKind: delete static_cast<ProFunction *>(itm); break;
+        case ConditionKind: delete static_cast<ProCondition *>(itm); break;
+        case OperatorKind: delete static_cast<ProOperator *>(itm); break;
+        case VariableKind: delete static_cast<ProVariable *>(itm); break;
+        }
     }
 }