Refactor + document + bug
Branch done

TODO: should handle state change of model,
requires major change in model/server, should discuss strategies.