hmm why is this abstract? Can this be final and have a private ctor