Make type rules in Add clearer

Taken from #3235
Merge pull request #3245 from cleishm/type_clearup

[2.0] Make type rules in Add clearer