Yeah, it makes more sense but I couldn’t alter core JME without breaking things.
onDisable() is called before terminate if the state was enabled. Always. You can count on that lifecycle from BaseAppState… it’s the entire reason it exists.
You can setup thing that should exist for the life of the state in initialize() and clean them up in terminate().
You can do things in onEnable() that are only for when enabled. …and onDisable() for when things are disabled.
A lot of times I will create my spatials in initialize and add/remove them only in onEnable() and onDisable().
Edit: you can also look at most of my more complicated examples. They do this exactly.