this class need to be in core