some refact, not there yet