observers are optional