complete CRUD support
support addTag/removeTag
refactor code