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.