8LL#12

Got it working, covered all bases with tests.  There is definitely smelly code in here but the commit was becoming too big I thought so I pull requested it first.