updated to require_self