only render self when necessary