abstract?
internal ctor?