diff --git a/spec.html b/spec.html
index 0c5733c..7a37a7a 100644
--- a/spec.html
+++ b/spec.html
@@ -245,8 +245,12 @@
%WrapForValidIteratorPrototype%.return ( )
1. Let _O_ be *this* value.
1. Perform ? RequireInternalSlot(_O_, [[Iterated]]).
- 1. Let _result_ be ? IteratorClose(_O_.[[Iterated]], NormalCompletion(*undefined*)).
- 1. Return CreateIterResultObject(_result_, true).
+ 1. Let _iterator_ be _O_.[[Iterated]].[[Iterator]].
+ 1. Assert: Type(_iterator_) is Object.
+ 1. Let _returnMethod_ be ? GetMethod(_iterator_, *"return"*).
+ 1. If _returnMethod_ is *undefined*, then
+ 1. Return CreateIterResultObject(*undefined*, *true*).
+ 1. Return ? Call(_returnMethod_, _iterator_).
@@ -336,11 +340,15 @@ %WrapForValidAsyncIteratorPrototype%.return ( )
1. Let _promiseCapability_ be ! NewPromiseCapability(%Promise%).
1. Let _check_ be Completion(RequireInternalSlot(_O_, [[AsyncIterated]])).
1. IfAbruptRejectPromise(_check_, _promiseCapability_).
- 1. Let _result_ be Completion(AsyncIteratorClose(_O_.[[AsyncIterated]], NormalCompletion(*undefined*))).
+ 1. Let _iterator_ be _O_.[[AsyncIterated]].[[Iterator]].
+ 1. Assert: Type(_iterator_) is Object.
+ 1. Let _returnMethod_ be Completion(GetMethod(_iterator_, *"return"*)).
+ 1. IfAbruptRejectPromise(_returnMethod_, _promiseCapability_).
+ 1. If _returnMethod_ is *undefined*, then
+ 1. Return ? PromiseResolve(%Promise%, CreateIterResultObject(*undefined*, *true*)).
+ 1. Let _result_ be Completion(Call(_returnMethod_, _iterator_)).
1. IfAbruptRejectPromise(_result_, _promiseCapability_).
- 1. Let _iterResult_ be CreateIterResultObject(_result_, *true*).
- 1. Perform ! Call(_promiseCapability_.[[Resolve]], *undefined*, « _iterResult_ »).
- 1. Return _promiseCapability_.[[Promise]].
+ 1. Return ? PromiseResolve(%Promise%, _result_).