almost implement swizzling, but the compiler hates me