remainder of easy_qb.js after abstraction