added observers and a message pump