use immutable ctx/env