Issue 3 - as isBlank() doesn't move the pointer, the code using it must then use skip() to skip the field. It wasn't so it was reading in the wrong data when it advanced