modifications but still kinda long oh well