separate two code paths (much less confusing)