Reordered some shit, added interfaces to implement