Observer design pattern.