Getting there....lots more to re-factor, that's what this is turning into :(