Solved it, just needed to wrap my text in a <repeat>{hook}</repeat> I am hooking FeatherBoard to register a custom placeholder, like so. I have FeatherBoard as a dependancy in my plugin.yml so it's definitely loading after featherboard. Code (Text): PlaceholderAPI.registerPlaceholder(featherboardPlaceholder, new PlaceholderAPI.PlaceholderRequestEventHandler() { @Override public String onPlaceholderRequest(PlaceholderAPI.PlaceholderRequestEvent evt) { return Integer.toString(new Random().nextInt(5000)); } }); And my featherboard config Code (Text): currency: text: - '{currency}' interval: 10 random: false Now the place holder registers just fine, it shows up in the console log that featherboard registered my hook. And when I join the server it updates the hook, but only once, all the other built in hooks such as RAM update just fine. This problem is only resolved by doing "/featherboard reload". However, I'd like to avoid having to do a featherboard reload each time I start my server, especially as it can't even be automated from console. Does anyone have any ideas as to why FeatherBoard is behaving like this? PS: I found a similar thread here, but there didn't seem to be a solution and calling the reload method internally by reflection is not easy as the plugin is heavily obfuscated.