added ObservableListener companion object