Would be a good idea to define 'cast' here (as you do with **immutable** below)