draft implementation of act() + work on observe()