Modularized some shit. methods still require implementing