diff --git a/features.txt b/features.txt
index c1a145619effb2c11b4e7a1d9785afd46198053d..257f379ee658f006a17b7868ce5259353ff84f9a 100644
--- a/features.txt
+++ b/features.txt
@@ -55,9 +55,9 @@ regexp-unicode-property-escapes
 Atomics
 SharedArrayBuffer
 
-# Array.prototype.flatten and Array.prototype.flatMap
+# Array.prototype.flat and Array.prototype.flatMap
 # https://github.com/tc39/proposal-flatMap
-Array.prototype.flatten
+Array.prototype.flat
 Array.prototype.flatMap
 
 # String Trimming
diff --git a/test/built-ins/Array/prototype/flatten/array-like-objects.js b/test/built-ins/Array/prototype/flat/array-like-objects.js
similarity index 78%
rename from test/built-ins/Array/prototype/flatten/array-like-objects.js
rename to test/built-ins/Array/prototype/flat/array-like-objects.js
index f9ed97b058cea7fcd7c0402b7eb4efdaec8f60f1..4cd131b85bbe0b3291a38afe7e02cea59f114368 100644
--- a/test/built-ins/Array/prototype/flatten/array-like-objects.js
+++ b/test/built-ins/Array/prototype/flat/array-like-objects.js
@@ -1,11 +1,11 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 description: >
     array-like objects can be flattened
 includes: [compareArray.js]
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 function getArgumentsObject() {
@@ -13,19 +13,19 @@ function getArgumentsObject() {
 }
 
 var a = getArgumentsObject([1], [2]);
-var actual = [].flatten.call(a);
+var actual = [].flat.call(a);
 assert.compareArray(actual, [1, 2], 'arguments objects');
 
 var a = {
   length: 1,
   0: [1],
 };
-var actual = [].flatten.call(a);
+var actual = [].flat.call(a);
 assert.compareArray(actual, [1], 'array-like objects');
 
 var a = {
   length: undefined,
   0: [1],
 };
-var actual = [].flatten.call(a);
+var actual = [].flat.call(a);
 assert.compareArray(actual, [], 'array-like objects; undefined length');
diff --git a/test/built-ins/Array/prototype/flatten/bound-function-call.js b/test/built-ins/Array/prototype/flat/bound-function-call.js
similarity index 61%
rename from test/built-ins/Array/prototype/flatten/bound-function-call.js
rename to test/built-ins/Array/prototype/flat/bound-function-call.js
index fd35f0975f3a766daf04f67f3b75f8b19019d493..efff7d963c60379e2147696839ef3fec883a1cf8 100644
--- a/test/built-ins/Array/prototype/flatten/bound-function-call.js
+++ b/test/built-ins/Array/prototype/flat/bound-function-call.js
@@ -1,17 +1,17 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 description: >
     using bound functions
 includes: [compareArray.js]
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 var a = [
   [0],
   [1]
 ];
-var actual = [].flatten.bind(a)();
+var actual = [].flat.bind(a)();
 
-assert.compareArray(actual, [0, 1], 'bound flatten');
+assert.compareArray(actual, [0, 1], 'bound flat');
diff --git a/test/built-ins/Array/prototype/flatten/empty-array-elements.js b/test/built-ins/Array/prototype/flat/empty-array-elements.js
similarity index 68%
rename from test/built-ins/Array/prototype/flatten/empty-array-elements.js
rename to test/built-ins/Array/prototype/flat/empty-array-elements.js
index 379b1e48cd87ef869ced614559cc815235347717..c78eb3c660d5aea2295596324ead52d722f8ad68 100644
--- a/test/built-ins/Array/prototype/flatten/empty-array-elements.js
+++ b/test/built-ins/Array/prototype/flat/empty-array-elements.js
@@ -1,24 +1,24 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 description: >
     arrays with empty arrays elements
 includes: [compareArray.js]
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 var a = {};
-assert.compareArray([].flatten(), []);
+assert.compareArray([].flat(), []);
 assert.compareArray([
   [],
   []
-].flatten(), []);
+].flat(), []);
 assert.compareArray([
   [],
   [1]
-].flatten(), [1]);
+].flat(), [1]);
 assert.compareArray([
   [],
   [1, a]
-].flatten(), [1, a]);
+].flat(), [1, a]);
diff --git a/test/built-ins/Array/prototype/flatten/empty-object-elements.js b/test/built-ins/Array/prototype/flat/empty-object-elements.js
similarity index 61%
rename from test/built-ins/Array/prototype/flatten/empty-object-elements.js
rename to test/built-ins/Array/prototype/flat/empty-object-elements.js
index e1fcb18d31a4faa1c7b870fae04b64b1e0789f74..dc3e92eb4f31371f847241b45937f8e7b32c905b 100644
--- a/test/built-ins/Array/prototype/flatten/empty-object-elements.js
+++ b/test/built-ins/Array/prototype/flat/empty-object-elements.js
@@ -1,22 +1,22 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 description: >
     arrays with empty object elements
 includes: [compareArray.js]
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 var a = {},
   b = {};
 
-assert.compareArray([a].flatten(), [a]);
-assert.compareArray([a, [b]].flatten(), [a, b]);
+assert.compareArray([a].flat(), [a]);
+assert.compareArray([a, [b]].flat(), [a, b]);
 assert.compareArray([
   [a], b
-].flatten(), [a, b]);
+].flat(), [a, b]);
 assert.compareArray([
   [a],
   [b]
-].flatten(), [a, b]);
+].flat(), [a, b]);
diff --git a/test/built-ins/Array/prototype/flat/length.js b/test/built-ins/Array/prototype/flat/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..4c0896f34947c0c563d3f02af5eaa917af2d4752
--- /dev/null
+++ b/test/built-ins/Array/prototype/flat/length.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-array.prototype.flat
+description: Array.prototype.flat.length value and descriptor.
+info: >
+  17 ECMAScript Standard Built-in Objects
+includes: [propertyHelper.js]
+features: [Array.prototype.flat]
+---*/
+
+assert.sameValue(
+  Array.prototype.flat.length, 0,
+  'The value of `Array.prototype.flat.length` is `0`'
+);
+
+verifyNotEnumerable(Array.prototype.flat, 'length');
+verifyNotWritable(Array.prototype.flat, 'length');
+verifyConfigurable(Array.prototype.flat, 'length');
diff --git a/test/built-ins/Array/prototype/flat/name.js b/test/built-ins/Array/prototype/flat/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..312827bc1a3920604d7bbf4282d1844fb40f4efa
--- /dev/null
+++ b/test/built-ins/Array/prototype/flat/name.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-array.prototype.flat
+description: >
+  Array.prototype.flat.name value and descriptor.
+info: >
+  17 ECMAScript Standard Built-in Objects
+includes: [propertyHelper.js]
+features: [Array.prototype.flat]
+---*/
+
+assert.sameValue(
+  Array.prototype.flat.name, 'flat',
+  'The value of `Array.prototype.flat.name` is `"flat"`'
+);
+
+verifyNotEnumerable(Array.prototype.flat, 'name');
+verifyNotWritable(Array.prototype.flat, 'name');
+verifyConfigurable(Array.prototype.flat, 'name');
diff --git a/test/built-ins/Array/prototype/flatten/non-numeric-depth-should-not-throw.js b/test/built-ins/Array/prototype/flat/non-numeric-depth-should-not-throw.js
similarity index 80%
rename from test/built-ins/Array/prototype/flatten/non-numeric-depth-should-not-throw.js
rename to test/built-ins/Array/prototype/flat/non-numeric-depth-should-not-throw.js
index 5f6f59d2f0fe92ea4571486bf842ef9c0fc3a8de..68f229a243e5fc881a29f31f7a3b0d462453d705 100644
--- a/test/built-ins/Array/prototype/flatten/non-numeric-depth-should-not-throw.js
+++ b/test/built-ins/Array/prototype/flat/non-numeric-depth-should-not-throw.js
@@ -1,11 +1,11 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 description: >
     if the argument is a string or object, the depthNum is 0
 includes: [compareArray.js]
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 var a = [1, [2]];
@@ -13,31 +13,31 @@ var expected = a;
 
 // non integral string depthNum is converted to 0
 var depthNum = 'TestString';
-var actual = a.flatten(depthNum);
+var actual = a.flat(depthNum);
 assert(compareArray(actual, expected), 'non integral string depthNum');
 
 // object type depthNum is converted to 0
 var depthNum = {};
-var actual = a.flatten(depthNum);
+var actual = a.flat(depthNum);
 assert(compareArray(actual, expected), 'object type depthNum');
 
 // negative infinity depthNum is converted to 0
 var depthNum = Number.NEGATIVE_INFINITY;
-var actual = a.flatten(depthNum);
+var actual = a.flat(depthNum);
 assert(compareArray(actual, expected), 'negative infinity depthNum');
 
 // positive zero depthNum is converted to 0
 var depthNum = +0;
-var actual = a.flatten(depthNum);
+var actual = a.flat(depthNum);
 assert(compareArray(actual, expected), 'positive zero depthNum');
 
 // negative zero depthNum is converted to 0
 var depthNum = -0;
-var actual = a.flatten(depthNum);
+var actual = a.flat(depthNum);
 assert(compareArray(actual, expected), 'negative zero depthNum');
 
 // integral string depthNum is converted to an integer
 var depthNum = '1';
-var actual = a.flatten(depthNum);
+var actual = a.flat(depthNum);
 var expected = [1, 2]
 assert(compareArray(actual, expected), 'integral string depthNum');
diff --git a/test/built-ins/Array/prototype/flatten/non-object-ctor-throws.js b/test/built-ins/Array/prototype/flat/non-object-ctor-throws.js
similarity index 84%
rename from test/built-ins/Array/prototype/flatten/non-object-ctor-throws.js
rename to test/built-ins/Array/prototype/flat/non-object-ctor-throws.js
index fc8e8768591b3c5879137c810b432d8c969a92c5..eb4f5ca0925c3cefeebcf5c4e556763d86af9785 100644
--- a/test/built-ins/Array/prototype/flatten/non-object-ctor-throws.js
+++ b/test/built-ins/Array/prototype/flat/non-object-ctor-throws.js
@@ -1,33 +1,33 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 description: >
     Behavior when `constructor` property is neither an Object nor undefined
     - if IsConstructor(C) is false, throw a TypeError exception.
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 var a = [];
 a.constructor = null;
 assert.throws(TypeError, function() {
-  a.flatten();
+  a.flat();
 }, 'null value');
 
 var a = [];
 a.constructor = 1;
 assert.throws(TypeError, function() {
-  a.flatten();
+  a.flat();
 }, 'number value');
 
 var a = [];
 a.constructor = 'string';
 assert.throws(TypeError, function() {
-  a.flatten();
+  a.flat();
 }, 'string value');
 
 var a = [];
 a.constructor = true;
 assert.throws(TypeError, function() {
-  a.flatten();
+  a.flat();
 }, 'boolean value');
diff --git a/test/built-ins/Array/prototype/flat/null-undefined-elements.js b/test/built-ins/Array/prototype/flat/null-undefined-elements.js
new file mode 100644
index 0000000000000000000000000000000000000000..a252f10bc80978624b34011a69d6c61682f6bc52
--- /dev/null
+++ b/test/built-ins/Array/prototype/flat/null-undefined-elements.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-array.prototype.flat
+description: >
+    arrays with null, and undefined
+includes: [compareArray.js]
+features: [Array.prototype.flat]
+---*/
+
+var a = [void 0];
+
+assert(compareArray([1, null, void 0].flat(), [1, null, undefined]));
+assert(compareArray([1, [null, void 0]].flat(), [1, null, undefined]));
+assert(compareArray([
+  [null, void 0],
+  [null, void 0]
+].flat(), [null, undefined, null, undefined]));
+assert(compareArray([1, [null, a]].flat(1), [1, null, a]));
+assert(compareArray([1, [null, a]].flat(2), [1, null, undefined]));
diff --git a/test/built-ins/Array/prototype/flatten/null-undefined-input-throws.js b/test/built-ins/Array/prototype/flat/null-undefined-input-throws.js
similarity index 73%
rename from test/built-ins/Array/prototype/flatten/null-undefined-input-throws.js
rename to test/built-ins/Array/prototype/flat/null-undefined-input-throws.js
index d3a5a59adc77b1c4c2bf30a14dbebf87a08a9585..ee590d27a1e9f932d2b237f1e2b94e0f035775bc 100644
--- a/test/built-ins/Array/prototype/flatten/null-undefined-input-throws.js
+++ b/test/built-ins/Array/prototype/flat/null-undefined-input-throws.js
@@ -1,20 +1,20 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 description: >
     null or undefined should throw TypeError Exception
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 assert.throws(TypeError, function() {
-  [].flatten.call(null);
+  [].flat.call(null);
 }, 'null value');
 
 assert.throws(TypeError, function() {
-  [].flatten.call();
+  [].flat.call();
 }, 'missing');
 
 assert.throws(TypeError, function() {
-  [].flatten.call(void 0);
+  [].flat.call(void 0);
 }, 'undefined');
diff --git a/test/built-ins/Array/prototype/flatten/positive-infinity.js b/test/built-ins/Array/prototype/flat/positive-infinity.js
similarity index 64%
rename from test/built-ins/Array/prototype/flatten/positive-infinity.js
rename to test/built-ins/Array/prototype/flat/positive-infinity.js
index 0c4dfcd593290c0e19f81daa0a85bd32e96ff80a..381200976ab0eadc7e14e69e690d13b4a43ff50d 100644
--- a/test/built-ins/Array/prototype/flatten/positive-infinity.js
+++ b/test/built-ins/Array/prototype/flat/positive-infinity.js
@@ -1,12 +1,12 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 description: >
     if the argument is a positive infinity, the depthNum is max depth of the array
 includes: [compareArray.js]
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 var a = [1, [2, [3, [4]]]]
-assert(compareArray(a.flatten(Number.POSITIVE_INFINITY), [1, 2, 3, 4]), 'positive infinity depthNum');
+assert(compareArray(a.flat(Number.POSITIVE_INFINITY), [1, 2, 3, 4]), 'positive infinity depthNum');
diff --git a/test/built-ins/Array/prototype/flatten/prop-desc.js b/test/built-ins/Array/prototype/flat/prop-desc.js
similarity index 52%
rename from test/built-ins/Array/prototype/flatten/prop-desc.js
rename to test/built-ins/Array/prototype/flat/prop-desc.js
index f7f386148bbb3fd32d014c951439f630c2187184..c538b2b7b74950d13166f52d11b3e18bc2783fe3 100644
--- a/test/built-ins/Array/prototype/flatten/prop-desc.js
+++ b/test/built-ins/Array/prototype/flat/prop-desc.js
@@ -1,21 +1,21 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 es6id: 22.1.3
 description: Property type and descriptor.
 info: >
   17 ECMAScript Standard Built-in Objects
 includes: [propertyHelper.js]
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 assert.sameValue(
-  typeof Array.prototype.flatten,
+  typeof Array.prototype.flat,
   'function',
-  '`typeof Array.prototype.flatten` is `function`'
+  '`typeof Array.prototype.flat` is `function`'
 );
 
-verifyNotEnumerable(Array.prototype, 'flatten');
-verifyWritable(Array.prototype, 'flatten');
-verifyConfigurable(Array.prototype, 'flatten');
+verifyNotEnumerable(Array.prototype, 'flat');
+verifyWritable(Array.prototype, 'flat');
+verifyConfigurable(Array.prototype, 'flat');
diff --git a/test/built-ins/Array/prototype/flatten/symbol-object-create-null-depth-throws.js b/test/built-ins/Array/prototype/flat/symbol-object-create-null-depth-throws.js
similarity index 73%
rename from test/built-ins/Array/prototype/flatten/symbol-object-create-null-depth-throws.js
rename to test/built-ins/Array/prototype/flat/symbol-object-create-null-depth-throws.js
index af58ce6b7d20662e512db629a36a98d1eda100b0..a631efb34dbd9eb7137c2e0518949a75796bb77a 100644
--- a/test/built-ins/Array/prototype/flatten/symbol-object-create-null-depth-throws.js
+++ b/test/built-ins/Array/prototype/flat/symbol-object-create-null-depth-throws.js
@@ -1,16 +1,16 @@
 // Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-esid: sec-array.prototype.flatten
+esid: sec-array.prototype.flat
 description: >
     if the argument is a Symbol or Object null, it throws exception
-features: [Array.prototype.flatten]
+features: [Array.prototype.flat]
 ---*/
 
 assert.throws(TypeError, function() {
-  [].flatten(Symbol());
+  [].flat(Symbol());
 }, 'symbol value');
 
 assert.throws(TypeError, function() {
-  [].flatten(Object.create(null));
+  [].flat(Object.create(null));
 }, 'object create null');
diff --git a/test/built-ins/Array/prototype/flatten/length.js b/test/built-ins/Array/prototype/flatten/length.js
deleted file mode 100644
index 0e13e5ec528addf13472b7a8c19f120474571e61..0000000000000000000000000000000000000000
--- a/test/built-ins/Array/prototype/flatten/length.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-/*---
-esid: sec-array.prototype.flatten
-description: Array.prototype.flatten.length value and descriptor.
-info: >
-  17 ECMAScript Standard Built-in Objects
-includes: [propertyHelper.js]
-features: [Array.prototype.flatten]
----*/
-
-assert.sameValue(
-  Array.prototype.flatten.length, 0,
-  'The value of `Array.prototype.flatten.length` is `0`'
-);
-
-verifyNotEnumerable(Array.prototype.flatten, 'length');
-verifyNotWritable(Array.prototype.flatten, 'length');
-verifyConfigurable(Array.prototype.flatten, 'length');
diff --git a/test/built-ins/Array/prototype/flatten/name.js b/test/built-ins/Array/prototype/flatten/name.js
deleted file mode 100644
index 6d89ae6b7d016a47854ce9a15f98bd4c9c2aa091..0000000000000000000000000000000000000000
--- a/test/built-ins/Array/prototype/flatten/name.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-/*---
-esid: sec-array.prototype.flatten
-description: >
-  Array.prototype.flatten.name value and descriptor.
-info: >
-  17 ECMAScript Standard Built-in Objects
-includes: [propertyHelper.js]
-features: [Array.prototype.flatten]
----*/
-
-assert.sameValue(
-  Array.prototype.flatten.name, 'flatten',
-  'The value of `Array.prototype.flatten.name` is `"flatten"`'
-);
-
-verifyNotEnumerable(Array.prototype.flatten, 'name');
-verifyNotWritable(Array.prototype.flatten, 'name');
-verifyConfigurable(Array.prototype.flatten, 'name');
diff --git a/test/built-ins/Array/prototype/flatten/null-undefined-elements.js b/test/built-ins/Array/prototype/flatten/null-undefined-elements.js
deleted file mode 100644
index 8211fdcc28b5b6db36623f999b87b4368dfa71d3..0000000000000000000000000000000000000000
--- a/test/built-ins/Array/prototype/flatten/null-undefined-elements.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (C) 2018 Shilpi Jain and Michael Ficarra. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-/*---
-esid: sec-array.prototype.flatten
-description: >
-    arrays with null, and undefined
-includes: [compareArray.js]
-features: [Array.prototype.flatten]
----*/
-
-var a = [void 0];
-
-assert(compareArray([1, null, void 0].flatten(), [1, null, undefined]));
-assert(compareArray([1, [null, void 0]].flatten(), [1, null, undefined]));
-assert(compareArray([
-  [null, void 0],
-  [null, void 0]
-].flatten(), [null, undefined, null, undefined]));
-assert(compareArray([1, [null, a]].flatten(1), [1, null, a]));
-assert(compareArray([1, [null, a]].flatten(2), [1, null, undefined]));