Don't throw IllegalStateException if start() or stop() is called in an inappropriate state.
Try to clean up if start() fails so it's not necessary to call stop() before trying again.