diff --git a/src/proto/terminal.pro b/src/proto/terminal.pro
index f5bd1a6..d814bc8 100644
--- a/src/proto/terminal.pro
+++ b/src/proto/terminal.pro
@@ -18,6 +18,7 @@
 cursorentry_T *term_get_cursor_shape(guicolor_T *fg, guicolor_T *bg);
 int term_use_loop(void);
 void term_win_entered(void);
+void term_focus_change(int in_focus);
 int terminal_loop(int blocking);
 int may_close_term_popup(void);
 void term_channel_closing(channel_T *ch);
diff --git a/src/terminal.c b/src/terminal.c
index 4a95a3e..c3ce116 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1128,6 +1128,21 @@
 }
 
 /*
+ * Read any vterm output and send it on the channel.
+ */
+    static void
+term_forward_output(term_T *term)
+{
+    VTerm *vterm = term->tl_vterm;
+    char   buf[KEY_BUF_LEN];
+    size_t curlen = vterm_output_read(vterm, buf, KEY_BUF_LEN);
+
+    if (curlen > 0)
+	channel_send(term->tl_job->jv_channel, get_tty_part(term),
+					     (char_u *)buf, (int)curlen, NULL);
+}
+
+/*
  * Write job output "msg[len]" to the vterm.
  */
     static void
@@ -1154,14 +1169,7 @@
 
     // flush vterm buffer when vterm responded to control sequence
     if (prevlen != vterm_output_get_buffer_current(vterm))
-    {
-	char   buf[KEY_BUF_LEN];
-	size_t curlen = vterm_output_read(vterm, buf, KEY_BUF_LEN);
-
-	if (curlen > 0)
-	    channel_send(term->tl_job->jv_channel, get_tty_part(term),
-					     (char_u *)buf, (int)curlen, NULL);
-    }
+	term_forward_output(term);
 
     // this invokes the damage callbacks
     vterm_screen_flush_damage(vterm_obtain_screen(vterm));
@@ -2490,6 +2498,23 @@
     }
 }
 
+    void
+term_focus_change(int in_focus)
+{
+    term_T *term = curbuf->b_term;
+
+    if (term != NULL && term->tl_vterm != NULL)
+    {
+	VTermState	*state = vterm_obtain_state(term->tl_vterm);
+
+	if (in_focus)
+	    vterm_state_focus_in(state);
+	else
+	    vterm_state_focus_out(state);
+	term_forward_output(term);
+    }
+}
+
 /*
  * vgetc() may not include CTRL in the key when modify_other_keys is set.
  * Return the Ctrl-key value in that case.
diff --git a/src/testdir/dumps/Test_terminal_focus_1.dump b/src/testdir/dumps/Test_terminal_focus_1.dump
new file mode 100644
index 0000000..96fe303
--- /dev/null
+++ b/src/testdir/dumps/Test_terminal_focus_1.dump
@@ -0,0 +1,6 @@
+> +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|I+0#0000000&| |a|m| |l|o|s|t| @65
diff --git a/src/testdir/dumps/Test_terminal_focus_2.dump b/src/testdir/dumps/Test_terminal_focus_2.dump
new file mode 100644
index 0000000..b4e8f4c
--- /dev/null
+++ b/src/testdir/dumps/Test_terminal_focus_2.dump
@@ -0,0 +1,6 @@
+> +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|I+0#0000000&| |a|m| |b|a|c|k| @65
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 8cdb42a..61b1458 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -1124,6 +1124,40 @@
   unlet g:job
 endfunc
 
+func Test_terminal_focus_events()
+  CheckNotGui
+  CheckUnix
+  CheckRunVimInTerminal
+
+  let save_term = &term
+  let save_ttymouse = &ttymouse
+  set term=xterm ttymouse=xterm2
+
+  let lines =<< trim END
+      set term=xterm ttymouse=xterm2
+      au FocusLost * echo 'I am lost'
+      au FocusGained * echo 'I am back'
+      " FIXME: sometimes this job hangs, exit after a couple of seconds
+      call timer_start(2000, {id -> execute('qall')})
+  END
+  call writefile(lines, 'XtermFocus')
+  let buf = RunVimInTerminal('-S XtermFocus', #{rows: 6})
+
+  " Send a focus event to ourselves, it should be forwarded to the terminal
+  call feedkeys("\<Esc>[O", "Lx!")
+  call TermWait(buf)
+  call VerifyScreenDump(buf, 'Test_terminal_focus_1', {})
+
+  call feedkeys("\<Esc>[I", "Lx!")
+  call TermWait(buf)
+  call VerifyScreenDump(buf, 'Test_terminal_focus_2', {})
+
+  call StopVimInTerminal(buf)
+  call delete('XtermFocus')
+  let &term = save_term
+  let &ttymouse = save_ttymouse
+endfunc
+
 " Run Vim, start a terminal in that Vim with the kill argument,
 " :qall works.
 func Run_terminal_qall_kill(line1, line2)
diff --git a/src/ui.c b/src/ui.c
index 524eb82..906d88f 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -1145,6 +1145,10 @@
 	last_time = time(NULL);
     }
 
+#ifdef FEAT_TERMINAL
+    term_focus_change(in_focus);
+#endif
+
     /*
      * Fire the focus gained/lost autocommand.
      */
diff --git a/src/version.c b/src/version.c
index 3f0b5fd..0864655 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3761,
+/**/
     3760,
 /**/
     3759,
