separate the open/close effects as self object callable