do not duplicate the logic