experiment and refactor
update