constructor and selector help build abstraction