split out different joins into different classes

I'm not sure that this is worth it