restructure a bit, still learning