add observe function