Uses our custom event system, uses methods that take callables so that internal dependancies can be passed.