modify self logic