use polyfill only when needed