First draft of Observer pattern. Don't use it yet - needs review - pushed for safe-keeping