diff --git a/src/annex-b-fns/eval-global-existing-global-init.case b/src/annex-b-fns/eval-global-existing-global-init.case
index 02d9aa778959d92c5cfb5496e54ab8f28ce25e50..0ac273e8e5c018ab5a1717b2b550dde876d0befe 100644
--- a/src/annex-b-fns/eval-global-existing-global-init.case
+++ b/src/annex-b-fns/eval-global-existing-global-init.case
@@ -1,25 +1,16 @@
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
-desc: Variable binding is set to `undefined`
+desc: Variable binding is left in place by legacy function hoisting
 template: eval-global
 info: |
     B.3.3.3 Changes to EvalDeclarationInstantiation
 
     [...]
     i. If varEnvRec is a global Environment Record, then
-       i. Perform ? varEnvRec.CreateGlobalFunctionBinding(F, undefined, true).
+       i. Perform ? varEnvRec.CreateGlobalVarBinding(F, true).
     [...]
 
-    8.1.1.4.18 CreateGlobalFunctionBinding
-
-    [...]
-    5. If existingProp is undefined or existingProp.[[Configurable]] is true,
-       then
-       [...]
-    6. Else,
-       a. Let desc be the PropertyDescriptor{[[Value]]: V }.
-    [...]
 includes: [fnGlobalObject.js, propertyHelper.js]
 ---*/
 
@@ -32,8 +23,15 @@ Object.defineProperty(fnGlobalObject(), 'f', {
 });
 //- before
 var global = fnGlobalObject();
-assert.sameValue(f, undefined, "binding is initialized to `undefined`");
+assert.sameValue(f, 'x', "binding is not reinitialized");
 
+verifyProperty(global, "f", {
+  enumerable: true,
+  writable: true,
+  configurable: false
+}, { restore: true });
+//- teardown
+assert.sameValue(typeof f, "function");
 verifyProperty(global, "f", {
   enumerable: true,
   writable: true,
diff --git a/src/annex-b-fns/eval-global-existing-non-enumerable-global-init.case b/src/annex-b-fns/eval-global-existing-non-enumerable-global-init.case
new file mode 100644
index 0000000000000000000000000000000000000000..4e8484aee4bad24428773c3684666a0582b9d4a9
--- /dev/null
+++ b/src/annex-b-fns/eval-global-existing-non-enumerable-global-init.case
@@ -0,0 +1,42 @@
+// Copyright (C) 2017 Igalia, S. L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+desc: >
+  Variable binding is left in place by legacy function hoisting.
+  CreateGlobalVariableBinding leaves the binding as non-enumerable even
+  if it has the chance to change it to be enumerable.
+template: eval-global
+info: |
+    B.3.3.3 Changes to EvalDeclarationInstantiation
+
+    [...]
+    i. If varEnvRec is a global Environment Record, then
+       i. Perform ? varEnvRec.CreateGlobalVarBinding(F, true).
+    [...]
+
+includes: [fnGlobalObject.js, propertyHelper.js]
+---*/
+
+//- setup
+Object.defineProperty(fnGlobalObject(), 'f', {
+  value: 'x',
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
+//- before
+var global = fnGlobalObject();
+assert.sameValue(f, 'x', "binding is not reinitialized");
+
+verifyProperty(global, 'f', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+}, { restore: true });
+//- teardown
+assert.sameValue(typeof f, "function");
+verifyProperty(global, 'f', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
diff --git a/src/annex-b-fns/global-existing-global-init.case b/src/annex-b-fns/global-existing-global-init.case
new file mode 100644
index 0000000000000000000000000000000000000000..b0d7d1eadc5334ae5385dd26ac3c3e364b418a76
--- /dev/null
+++ b/src/annex-b-fns/global-existing-global-init.case
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 Igalia, S. L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+desc: >
+  Variable binding is left in place by legacy function hoisting.
+  CreateGlobalVariableBinding leaves the binding as non-enumerable even
+  if it has the chance to change it to be enumerable.
+template: global
+info: |
+    B.3.3.3 Changes to GlobalDeclarationInstantiation
+
+    [...]
+    Perform ? varEnvRec.CreateGlobalVarBinding(F, true).
+    [...]
+
+includes: [fnGlobalObject.js, propertyHelper.js]
+---*/
+
+//- setup
+var global = fnGlobalObject();
+Object.defineProperty(global, 'f', {
+  value: 'x',
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
+
+$262.evalScript(`
+assert.sameValue(f, 'x');
+verifyProperty(global, 'f', {
+  enumerable: true,
+  writable: true,
+  configurable: false
+}, { restore: true });
+`);
+
+$262.evalScript(`
+//- body
+return 'inner declaration';
+//- teardown
+`);
+
+$262.evalScript(`
+verifyProperty(global, 'f', {
+  enumerable: true,
+  writable: true,
+  configurable: false
+});
+`);
diff --git a/src/annex-b-fns/global-existing-non-enumerable-global-init.case b/src/annex-b-fns/global-existing-non-enumerable-global-init.case
new file mode 100644
index 0000000000000000000000000000000000000000..c9e97cf9d1f8fa88570e4efacd67ba5b58ad69a5
--- /dev/null
+++ b/src/annex-b-fns/global-existing-non-enumerable-global-init.case
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 Igalia, S. L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+desc: >
+  Variable binding is left in place by legacy function hoisting.
+  CreateGlobalVariableBinding leaves the binding as non-enumerable even
+  if it has the chance to change it to be enumerable.
+template: global
+info: |
+    B.3.3.3 Changes to GlobalDeclarationInstantiation
+
+    [...]
+    Perform ? varEnvRec.CreateGlobalVarBinding(F, true).
+    [...]
+
+includes: [fnGlobalObject.js, propertyHelper.js]
+---*/
+
+//- setup
+var global = fnGlobalObject();
+Object.defineProperty(global, 'f', {
+  value: 'x',
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
+
+$262.evalScript(`
+assert.sameValue(f, 'x');
+verifyProperty(global, 'f', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+}, { restore: true });
+`);
+
+$262.evalScript(`
+//- body
+return 'inner declaration';
+//- teardown
+`);
+
+$262.evalScript(`
+assert.sameValue(f(), 'inner declaration');
+verifyProperty(global, 'f', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});
+`);