compatible w/ latest underscore.js; error handling