Messed around with Interfaces and such, please test to see if it works!