add oberserver pattern