I haven't had time to do a full investigation, but it appears that parametric regressors are set up in spm_get_ons.m. Then orthogonalization takes place in this line: u = spm_orth(u); That function, according to the notes inside the code, does % serial orthogonalisation starting with the first column Note however that the line in spm_get_ons.m is included in a loop over the trial types. So the code seems to say that the columns (trial type plus parametric modulations of same) tied to a single trial type are orthogonalized, but there's no orthogonalization between different trial types. If you need more details, you could either stare at the code or (more helpfully) set a breakpoint in the matlab debugger and see how the code does things.