moved to top-level classes because the outer class is deprecated now but these are still useful in testing (same for `Immutable...`)