merged three kernels into one, there's a major field swap bug