draft version
refactoring