* move common CRUD logic to abstract class
* bug fixing
* code optimisation