implementing observable model