Fully Working. Could use some clean up