annnnd lots of modifications :v