Sheldon
I believe I use your second option. This method is the one shown on the website. Go to www.midwestrapidtool.com and click the Programming tab at the bottom of the left side navigation bar. This is the list of all the variables I use and a theroy of operation.
In short the procedure I use is to zero the machine to machine 0,0, then get the x,y locations of all the tool holders. For example the locations of the Tool Holder in position 1 are stored in variables TOOL1X & TOOL1Y; of Tool Holder 2 in TOOL2X & TOOL2Y.....ect. To machine a part, I find the local 0,0 of the part and zero the cooridinate system to this point. The difference between this point and the machine 0,0 is stored in the variables XOFFSET and YOFFSET. When a tool change is required, for example to pick up the tool holder in position 1, I stay in the local cooridinate system and run the subroutine GETTOOL1. This moves the router to the location of (TOOL1X - OFFSETX),(TOOL1Y - OFFSETY)and picks up the Tool Holder in position 1, and then returns to the point where the change was called.
Hope this helps. If not send me an email through the website with your phone and I will give you a call.