Restructure Observer pattern as of issue #34