captured a few ideas from M