need refacto