Got functionality working.  Committing as-is then going back to clean up spaghetti in a future fix.