On stop, will this not change the service state from `STOPPING` (as set in the `stop()` method) to `RUNNING`? That seems wrong. Suggest you add a `calculateServiceState()` (similar to `calculateServiceUp()`) that sub-classes can override; we need to think more about the default impl for that.