some modification and augment