un-nest classes, move some logic to core, update some get-only properties that return arrays to methods