add factorial enhancement