basic idea laid out.  not a working version yet