some refactor or we will suffer