prevent direct instantiation