added observe for dirty checking