refactor
new constructor