refactor constructor signature