CommonJS compatible