Alternate approach #2 has gotten out of hand already, it has grown in complexity quite a bit.  Initial approach is still best so far.