general design and remove function