Looks messy. This is a rebase + adding API consistency changes (virtuals
and checks for NotNull)