added event hooks - pre-add, add, pre-remove, remove