accept self-keyword everywhere and implemented add/remove functions