point of no return. Need some refactor