add initialization methods and logic