Changed push behaviour to only accept functions
added some emit and observe functionality