add self adapt