refactor
this sux