diff --git a/src/core/lwt.mli b/src/core/lwt.mli
index cd622e7f9..fb12c0c73 100644
--- a/src/core/lwt.mli
+++ b/src/core/lwt.mli
@@ -1908,9 +1908,6 @@ val pause : unit -> unit t
     Putting the rest of your computation into a callback of [Lwt.pause ()]
     creates a “yield” that gives other callbacks a chance to run first.
 
-    To wait for one complete iteration of the main loop you need to wait for
-    [Lwt.pause () >>= Lwt.pause]
-
     For example, to break up a long-running computation, allowing I/O to be
     handled between chunks:
 
diff --git a/src/unix/lwt_main.ml b/src/unix/lwt_main.ml
index 17ea3c5a1..ca1f68f19 100644
--- a/src/unix/lwt_main.ml
+++ b/src/unix/lwt_main.ml
@@ -16,12 +16,10 @@ open Lwt.Infix
 
 let enter_iter_hooks = Lwt_sequence.create ()
 let leave_iter_hooks = Lwt_sequence.create ()
-let yielded = Lwt_sequence.create ()
 
-let yield () = (Lwt.add_task_r [@ocaml.warning "-3"]) yielded
+let yield () = Lwt.pause ()
 
 let abandon_yielded_and_paused () =
-  Lwt_sequence.clear yielded;
   Lwt.abandon_paused ()
 
 let run p =
@@ -34,20 +32,12 @@ let run p =
       Lwt_sequence.iter_l (fun f -> f ()) enter_iter_hooks;
 
       (* Do the main loop call. *)
-      let should_block_waiting_for_io =
-        Lwt.paused_count () = 0 && Lwt_sequence.is_empty yielded in
+      let should_block_waiting_for_io = Lwt.paused_count () = 0 in
       Lwt_engine.iter should_block_waiting_for_io;
 
       (* Fulfill paused promises. *)
       Lwt.wakeup_paused ();
 
-      (* Fulfill yield promises. *)
-      if not (Lwt_sequence.is_empty yielded) then begin
-        let tmp = Lwt_sequence.create () in
-        Lwt_sequence.transfer_r yielded tmp;
-        Lwt_sequence.iter_l (fun resolver -> Lwt.wakeup resolver ()) tmp
-      end;
-
       (* Call leave hooks. *)
       Lwt_sequence.iter_l (fun f -> f ()) leave_iter_hooks;
 
diff --git a/src/unix/lwt_main.mli b/src/unix/lwt_main.mli
index 75a3a6e39..7796dc500 100644
--- a/src/unix/lwt_main.mli
+++ b/src/unix/lwt_main.mli
@@ -49,14 +49,9 @@ val yield : unit -> unit Lwt.t [@@deprecated "Use Lwt.pause instead"]
 
       @deprecated Since 5.5.0 [yield] is deprecated in favor of the more general
       {!Lwt.pause} in order to avoid discrepancies in resolution (see below) and
-      stay compatible with other execution environments such as js_of_ocaml.
+      stay compatible with other execution environments such as js_of_ocaml. *)
 
-      Currently, paused promises are resolved more frequently than yielded promises.
-      The difference is unintended but existing applications could depend on it.
-      Unifying the two pools of promises into one in the future would eliminate
-      possible discrepancies and simplify the code. *)
-
-val abandon_yielded_and_paused : unit -> unit
+val abandon_yielded_and_paused : unit -> unit [@@deprecated "Use Lwt.abandon_paused instead"]
 (** Causes promises created with {!Lwt.pause} and {!Lwt_main.yield} to remain
     forever pending.
 
@@ -64,7 +59,10 @@ val abandon_yielded_and_paused : unit -> unit
     Once [yield] is phased out, this function will be deprecated as well.
 
     This is meant for use with {!Lwt.fork}, as a way to "abandon" more promise
-    chains that are pending in your process. *)
+    chains that are pending in your process.
+
+    @deprecated Since 5.5.1 [abandon_yielded_and_paused] is deprecated in favour
+    of [Lwt.abandon_paused]. *)
 
 
 
diff --git a/src/unix/lwt_unix.cppo.ml b/src/unix/lwt_unix.cppo.ml
index ed2105a4e..cd5785698 100644
--- a/src/unix/lwt_unix.cppo.ml
+++ b/src/unix/lwt_unix.cppo.ml
@@ -130,7 +130,7 @@ let sleep delay =
   Lwt.on_cancel waiter (fun () -> Lwt_engine.stop_event ev);
   waiter
 
-let yield = (Lwt_main.yield [@warning "-3"])
+let yield = Lwt.pause
 
 let auto_yield timeout =
   let limit = ref (Unix.gettimeofday () +. timeout) in