yagsolved Kunena plugin doesn't work properly because the onAfterRoute event gets fired only for system plugins. You have to convert it to a system plugin rather than a Kunena plugin and then it works fine. This involves changing the XML to have: and the plugin file yagsolved.php to change the class line to be class plgSystemYagSolved extends JPlugin as well as changing the path lower down in that same file to JPATH_PLUGINS . '/system/yagsolved/tpl/button_solved.html' You might also have to rename the language files to system instead of kunena for it to use the language properly. en-GB.plg_system_yagsolved.sys.ini Here is the locked code. This adds a parameter that allows you to lock a post when it's marked as solved. In the XML add this with the other fields: In the yagsolved.php add this at line 105 at the end of the onAfterRoute function: // lock solved topics $lockSolved = (int)$this->params->get('lock_solved', 1); if($lockSolved === 1) { $Dbo->setQuery("UPDATE #__kunena_topics SET locked = 1 WHERE id = " . (int)$topicData['id'] . " LIMIT 1"); $Dbo->query(); } In the language file add this: PLG_KUNENA_YAGSOLVED_LOCK_SOLVED_LABEL = "Lock Solved?" PLG_KUNENA_YAGSOLVED_LOCK_SOLVED_DESC = "Setting this to Yes will lock topics when they are solved." Also, I made the Solved button text configurable in the params by adding this field to the XML: And replacing this in yagsolved.php: $buttonCode = str_replace('{$solved_text}', JText::_('PLG_KUNENA_YAGSOLVED_BUTTONTEXT'), $buttonCode); With this: $buttonCode = str_replace('{$solved_text}', $this->params->get('topic_solved_button_text', "Solved"), $buttonCode); in the language file add this: PLG_KUNENA_YAGSOLVED_TOPIC_SOLVED_BUTTON_LABEL = "Solved button text:" PLG_KUNENA_YAGSOLVED_TOPIC_SOLVED_BUTTON_LABEL_DESC = "This is the text that will be displayed on the Solved button."