Changed various signatures and added types. Things will not compile until implementations are provided!