work in progress refactor to use Immutable.Vector