structs instead of arrays, #ifdef optimizations