introduced intermediate projection to reduce compile time