removing a syso and abstracting constructor