observer pattern is probably the way to go here