diff --git a/src/break-iterator.js b/src/break-iterator.js
index 5d40d66..dc0f387 100644
--- a/src/break-iterator.js
+++ b/src/break-iterator.js
@@ -64,42 +64,46 @@
  *
  * @constructor
  */
-Intl.v8BreakIterator = function() {
-  var locales = arguments[0];
-  var options = arguments[1];
+%SetProperty(Intl, 'v8BreakIterator', function() {
+    var locales = arguments[0];
+    var options = arguments[1];
 
-  if (!this || this === Intl) {
-    // Constructor is called as a function.
-    return new Intl.v8BreakIterator(locales, options);
-  }
+    if (!this || this === Intl) {
+      // Constructor is called as a function.
+      return new Intl.v8BreakIterator(locales, options);
+    }
 
-  return initializeBreakIterator(toObject(this), locales, options);
-};
+    return initializeBreakIterator(toObject(this), locales, options);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 
 
 /**
  * BreakIterator resolvedOptions method.
  */
-Intl.v8BreakIterator.prototype.resolvedOptions = function() {
-  if (%_IsConstructCall()) {
-    throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
-  }
+%SetProperty(Intl.v8BreakIterator.prototype, 'resolvedOptions', function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
 
-  if (!this || typeof this !== 'object' ||
-      this.__initializedIntlObject !== 'breakiterator') {
-    throw new TypeError('resolvedOptions method called on a non-object or ' +
-        'on a object that is not Intl.v8BreakIterator.');
-  }
+    if (!this || typeof this !== 'object' ||
+        this.__initializedIntlObject !== 'breakiterator') {
+      throw new TypeError('resolvedOptions method called on a non-object or ' +
+          'on a object that is not Intl.v8BreakIterator.');
+    }
 
-  var segmenter = this;
-  var locale = getOptimalLanguageTag(segmenter.resolved.requestedLocale,
-                                     segmenter.resolved.locale);
+    var segmenter = this;
+    var locale = getOptimalLanguageTag(segmenter.resolved.requestedLocale,
+                                       segmenter.resolved.locale);
 
-  return {
-    locale: locale,
-    type: segmenter.resolved.type
-  };
-};
+    return {
+      locale: locale,
+      type: segmenter.resolved.type
+    };
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 %FunctionRemovePrototype(Intl.v8BreakIterator.prototype.resolvedOptions);
 
 
@@ -109,13 +113,15 @@
  * order in the returned list as in the input list.
  * Options are optional parameter.
  */
-Intl.v8BreakIterator.supportedLocalesOf = function(locales) {
-  if (%_IsConstructCall()) {
-    throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
-  }
+%SetProperty(Intl.v8BreakIterator, 'supportedLocalesOf', function(locales) {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
 
-  return supportedLocalesOf('breakiterator', locales, arguments[1]);
-};
+    return supportedLocalesOf('breakiterator', locales, arguments[1]);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 %FunctionRemovePrototype(Intl.v8BreakIterator.supportedLocalesOf);
 
 
diff --git a/src/collator.js b/src/collator.js
index b4954a9..519635d 100644
--- a/src/collator.js
+++ b/src/collator.js
@@ -109,47 +109,51 @@
  *
  * @constructor
  */
-Intl.Collator = function() {
-  var locales = arguments[0];
-  var options = arguments[1];
+%SetProperty(Intl, 'Collator', function() {
+    var locales = arguments[0];
+    var options = arguments[1];
 
-  if (!this || this === Intl) {
-    // Constructor is called as a function.
-    return new Intl.Collator(locales, options);
-  }
+    if (!this || this === Intl) {
+      // Constructor is called as a function.
+      return new Intl.Collator(locales, options);
+    }
 
-  return initializeCollator(toObject(this), locales, options);
-};
+    return initializeCollator(toObject(this), locales, options);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 
 
 /**
  * Collator resolvedOptions method.
  */
-Intl.Collator.prototype.resolvedOptions = function() {
-  if (%_IsConstructCall()) {
-    throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
-  }
+%SetProperty(Intl.Collator.prototype, 'resolvedOptions', function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
 
-  if (!this || typeof this !== 'object' ||
-      this.__initializedIntlObject !== 'collator') {
-    throw new TypeError('resolvedOptions method called on a non-object ' +
-        'or on a object that is not Intl.Collator.');
-  }
+    if (!this || typeof this !== 'object' ||
+        this.__initializedIntlObject !== 'collator') {
+      throw new TypeError('resolvedOptions method called on a non-object ' +
+                          'or on a object that is not Intl.Collator.');
+    }
 
-  var coll = this;
-  var locale = getOptimalLanguageTag(coll.resolved.requestedLocale,
-                                     coll.resolved.locale);
+    var coll = this;
+    var locale = getOptimalLanguageTag(coll.resolved.requestedLocale,
+                                       coll.resolved.locale);
 
-  return {
-    locale: locale,
-    usage: coll.resolved.usage,
-    sensitivity: coll.resolved.sensitivity,
-    ignorePunctuation: coll.resolved.ignorePunctuation,
-    numeric: coll.resolved.numeric,
-    caseFirst: coll.resolved.caseFirst,
-    collation: coll.resolved.collation
-  };
-};
+    return {
+      locale: locale,
+      usage: coll.resolved.usage,
+      sensitivity: coll.resolved.sensitivity,
+      ignorePunctuation: coll.resolved.ignorePunctuation,
+      numeric: coll.resolved.numeric,
+      caseFirst: coll.resolved.caseFirst,
+      collation: coll.resolved.collation
+    };
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 %FunctionRemovePrototype(Intl.Collator.prototype.resolvedOptions);
 
 
@@ -159,13 +163,15 @@
  * order in the returned list as in the input list.
  * Options are optional parameter.
  */
-Intl.Collator.supportedLocalesOf = function(locales) {
-  if (%_IsConstructCall()) {
-    throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
-  }
+%SetProperty(Intl.Collator, 'supportedLocalesOf', function(locales) {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
 
-  return supportedLocalesOf('collator', locales, arguments[1]);
-};
+    return supportedLocalesOf('collator', locales, arguments[1]);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 %FunctionRemovePrototype(Intl.Collator.supportedLocalesOf);
 
 
diff --git a/src/date-format.js b/src/date-format.js
index 8f2651b..5ec3781 100644
--- a/src/date-format.js
+++ b/src/date-format.js
@@ -300,65 +300,69 @@
  *
  * @constructor
  */
-Intl.DateTimeFormat = function() {
-  var locales = arguments[0];
-  var options = arguments[1];
+%SetProperty(Intl, 'DateTimeFormat', function() {
+    var locales = arguments[0];
+    var options = arguments[1];
 
-  if (!this || this === Intl) {
-    // Constructor is called as a function.
-    return new Intl.DateTimeFormat(locales, options);
-  }
+    if (!this || this === Intl) {
+      // Constructor is called as a function.
+      return new Intl.DateTimeFormat(locales, options);
+    }
 
-  return initializeDateTimeFormat(toObject(this), locales, options);
-};
+    return initializeDateTimeFormat(toObject(this), locales, options);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 
 
 /**
  * DateTimeFormat resolvedOptions method.
  */
-Intl.DateTimeFormat.prototype.resolvedOptions = function() {
-  if (%_IsConstructCall()) {
-    throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
-  }
+%SetProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
 
-  if (!this || typeof this !== 'object' ||
-      this.__initializedIntlObject !== 'dateformat') {
-    throw new TypeError('resolvedOptions method called on a non-object or ' +
-        'on a object that is not Intl.DateTimeFormat.');
-  }
+    if (!this || typeof this !== 'object' ||
+        this.__initializedIntlObject !== 'dateformat') {
+      throw new TypeError('resolvedOptions method called on a non-object or ' +
+          'on a object that is not Intl.DateTimeFormat.');
+    }
 
-  var format = this;
-  var fromPattern = fromLDMLString(format.resolved.pattern);
-  var userCalendar = ICU_CALENDAR_MAP[format.resolved.calendar];
-  if (userCalendar === undefined) {
-    // Use ICU name if we don't have a match. It shouldn't happen, but
-    // it would be too strict to throw for this.
-    userCalendar = format.resolved.calendar;
-  }
+    var format = this;
+    var fromPattern = fromLDMLString(format.resolved.pattern);
+    var userCalendar = ICU_CALENDAR_MAP[format.resolved.calendar];
+    if (userCalendar === undefined) {
+      // Use ICU name if we don't have a match. It shouldn't happen, but
+      // it would be too strict to throw for this.
+      userCalendar = format.resolved.calendar;
+    }
 
-  var locale = getOptimalLanguageTag(format.resolved.requestedLocale,
-                                     format.resolved.locale);
+    var locale = getOptimalLanguageTag(format.resolved.requestedLocale,
+                                       format.resolved.locale);
 
-  var result = {
-    locale: locale,
-    numberingSystem: format.resolved.numberingSystem,
-    calendar: userCalendar,
-    timeZone: format.resolved.timeZone
-  };
+    var result = {
+      locale: locale,
+      numberingSystem: format.resolved.numberingSystem,
+      calendar: userCalendar,
+      timeZone: format.resolved.timeZone
+    };
 
-  addWECPropertyIfDefined(result, 'timeZoneName', fromPattern.timeZoneName);
-  addWECPropertyIfDefined(result, 'era', fromPattern.era);
-  addWECPropertyIfDefined(result, 'year', fromPattern.year);
-  addWECPropertyIfDefined(result, 'month', fromPattern.month);
-  addWECPropertyIfDefined(result, 'day', fromPattern.day);
-  addWECPropertyIfDefined(result, 'weekday', fromPattern.weekday);
-  addWECPropertyIfDefined(result, 'hour12', fromPattern.hour12);
-  addWECPropertyIfDefined(result, 'hour', fromPattern.hour);
-  addWECPropertyIfDefined(result, 'minute', fromPattern.minute);
-  addWECPropertyIfDefined(result, 'second', fromPattern.second);
+    addWECPropertyIfDefined(result, 'timeZoneName', fromPattern.timeZoneName);
+    addWECPropertyIfDefined(result, 'era', fromPattern.era);
+    addWECPropertyIfDefined(result, 'year', fromPattern.year);
+    addWECPropertyIfDefined(result, 'month', fromPattern.month);
+    addWECPropertyIfDefined(result, 'day', fromPattern.day);
+    addWECPropertyIfDefined(result, 'weekday', fromPattern.weekday);
+    addWECPropertyIfDefined(result, 'hour12', fromPattern.hour12);
+    addWECPropertyIfDefined(result, 'hour', fromPattern.hour);
+    addWECPropertyIfDefined(result, 'minute', fromPattern.minute);
+    addWECPropertyIfDefined(result, 'second', fromPattern.second);
 
-  return result;
-};
+    return result;
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 %FunctionRemovePrototype(Intl.DateTimeFormat.prototype.resolvedOptions);
 
 
@@ -368,13 +372,15 @@
  * order in the returned list as in the input list.
  * Options are optional parameter.
  */
-Intl.DateTimeFormat.supportedLocalesOf = function(locales) {
-  if (%_IsConstructCall()) {
-    throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
-  }
+%SetProperty(Intl.DateTimeFormat, 'supportedLocalesOf', function(locales) {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
 
-  return supportedLocalesOf('dateformat', locales, arguments[1]);
-};
+    return supportedLocalesOf('dateformat', locales, arguments[1]);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 %FunctionRemovePrototype(Intl.DateTimeFormat.supportedLocalesOf);
 
 
diff --git a/src/globals.js b/src/globals.js
index 6aaa5e4..ab132f4 100644
--- a/src/globals.js
+++ b/src/globals.js
@@ -135,6 +135,18 @@
 ];
 
 /**
+ * Object attributes (configurable, writable, enumerable).
+ * To combine attributes, OR them.
+ * Values/names are copied from v8/include/v8.h:PropertyAttribute
+ */
+var ATTRIBUTES = {
+  'NONE': 0,
+  'READ_ONLY': 1,
+  'DONT_ENUM': 2,
+  'DONT_DELETE': 4
+};
+
+/**
  * Error message for when function object is created with new and it's not
  * a constructor.
  */
diff --git a/src/number-format.js b/src/number-format.js
index 7a40707..a5bd75f 100644
--- a/src/number-format.js
+++ b/src/number-format.js
@@ -171,65 +171,69 @@
  *
  * @constructor
  */
-Intl.NumberFormat = function() {
-  var locales = arguments[0];
-  var options = arguments[1];
+%SetProperty(Intl, 'NumberFormat', function() {
+    var locales = arguments[0];
+    var options = arguments[1];
 
-  if (!this || this === Intl) {
-    // Constructor is called as a function.
-    return new Intl.NumberFormat(locales, options);
-  }
+    if (!this || this === Intl) {
+      // Constructor is called as a function.
+      return new Intl.NumberFormat(locales, options);
+    }
 
-  return initializeNumberFormat(toObject(this), locales, options);
-};
+    return initializeNumberFormat(toObject(this), locales, options);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 
 
 /**
  * NumberFormat resolvedOptions method.
  */
-Intl.NumberFormat.prototype.resolvedOptions = function() {
-  if (%_IsConstructCall()) {
-    throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
-  }
+%SetProperty(Intl.NumberFormat.prototype, 'resolvedOptions', function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
 
-  if (!this || typeof this !== 'object' ||
-      this.__initializedIntlObject !== 'numberformat') {
-    throw new TypeError('resolvedOptions method called on a non-object' +
-        ' or on a object that is not Intl.NumberFormat.');
-  }
+    if (!this || typeof this !== 'object' ||
+        this.__initializedIntlObject !== 'numberformat') {
+      throw new TypeError('resolvedOptions method called on a non-object' +
+          ' or on a object that is not Intl.NumberFormat.');
+    }
 
-  var format = this;
-  var locale = getOptimalLanguageTag(format.resolved.requestedLocale,
-                                     format.resolved.locale);
+    var format = this;
+    var locale = getOptimalLanguageTag(format.resolved.requestedLocale,
+                                       format.resolved.locale);
 
-  var result = {
-    locale: locale,
-    numberingSystem: format.resolved.numberingSystem,
-    style: format.resolved.style,
-    useGrouping: format.resolved.useGrouping,
-    minimumIntegerDigits: format.resolved.minimumIntegerDigits,
-    minimumFractionDigits: format.resolved.minimumFractionDigits,
-    maximumFractionDigits: format.resolved.maximumFractionDigits,
-  };
+    var result = {
+      locale: locale,
+      numberingSystem: format.resolved.numberingSystem,
+      style: format.resolved.style,
+      useGrouping: format.resolved.useGrouping,
+      minimumIntegerDigits: format.resolved.minimumIntegerDigits,
+      minimumFractionDigits: format.resolved.minimumFractionDigits,
+      maximumFractionDigits: format.resolved.maximumFractionDigits,
+    };
 
-  if (result.style === 'currency') {
-    defineWECProperty(result, 'currency', format.resolved.currency);
-    defineWECProperty(result, 'currencyDisplay',
-                      format.resolved.currencyDisplay);
-  }
+    if (result.style === 'currency') {
+      defineWECProperty(result, 'currency', format.resolved.currency);
+      defineWECProperty(result, 'currencyDisplay',
+                        format.resolved.currencyDisplay);
+    }
 
-  if (format.resolved.hasOwnProperty('minimumSignificantDigits')) {
-    defineWECProperty(result, 'minimumSignificantDigits',
-                      format.resolved.minimumSignificantDigits);
-  }
+    if (format.resolved.hasOwnProperty('minimumSignificantDigits')) {
+      defineWECProperty(result, 'minimumSignificantDigits',
+                        format.resolved.minimumSignificantDigits);
+    }
 
-  if (format.resolved.hasOwnProperty('maximumSignificantDigits')) {
-    defineWECProperty(result, 'maximumSignificantDigits',
-                      format.resolved.maximumSignificantDigits);
-  }
+    if (format.resolved.hasOwnProperty('maximumSignificantDigits')) {
+      defineWECProperty(result, 'maximumSignificantDigits',
+                        format.resolved.maximumSignificantDigits);
+    }
 
-  return result;
-};
+    return result;
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 %FunctionRemovePrototype(Intl.NumberFormat.prototype.resolvedOptions);
 
 
@@ -239,13 +243,15 @@
  * order in the returned list as in the input list.
  * Options are optional parameter.
  */
-Intl.NumberFormat.supportedLocalesOf = function(locales) {
-  if (%_IsConstructCall()) {
-    throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
-  }
+%SetProperty(Intl.NumberFormat, 'supportedLocalesOf', function(locales) {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
 
-  return supportedLocalesOf('numberformat', locales, arguments[1]);
-};
+    return supportedLocalesOf('numberformat', locales, arguments[1]);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
 %FunctionRemovePrototype(Intl.NumberFormat.supportedLocalesOf);
 
 
