when possible, use query .on() rather than .live() (from edsimpson)