added require_self