add self-adaption