This comes from the other thread but needs its own.  This is the general starting point.