merge from cloudeebus/cloudeebus.js