Ported new v3.1 fixes for #2007 to v3.0.
Fixed JSHint issues.
Resolved merge conflicts.