still trying to have much better design