This pains me but I don't have a better solution right now, just want to note how nasty the ctors look :)