add self invoke