Added derive function
Using weak references again for observers
Factored out common code into changed derive function
Made push! function support multiple messages