diff --git a/doc/reference/vte-sections.txt b/doc/reference/vte-sections.txt
index 3786e72a..a63fa343 100644
--- a/doc/reference/vte-sections.txt
+++ b/doc/reference/vte-sections.txt
@@ -5,6 +5,7 @@ VteTerminal
 VteCursorBlinkMode
 VteCursorShape
 VteEraseBinding
+VteTextBlinkMode
 VteFormat
 VteWriteFlags
 VteSelectionFunc
diff --git a/src/app/app.cc b/src/app/app.cc
index c4c578c6..d63adb6b 100644
--- a/src/app/app.cc
+++ b/src/app/app.cc
@@ -354,7 +354,7 @@ public:
                         { "background-operator", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_background_operator,
                           "Set background draw operator", "OPERATOR" },
                         { "blink", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_text_blink,
-                          "Text blink mode (always|focused|unfocused|never)", "MODE" },
+                          "Text blink mode (never|focused|unfocused|always)", "MODE" },
                         { "cell-height-scale", 0, 0, G_OPTION_ARG_DOUBLE, &cell_height_scale,
                           "Add extra line spacing", "1.0..2.0" },
                         { "cell-width-scale", 0, 0, G_OPTION_ARG_DOUBLE, &cell_width_scale,
diff --git a/src/vte.cc b/src/vte.cc
index 786ce804..310cbd94 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -7437,6 +7437,14 @@ VteTerminalPrivate::widget_focus_in(GdkEventFocus *event)
 		m_cursor_blink_state = TRUE;
 		m_has_focus = TRUE;
 
+                /* If blinking gets enabled now, do a full repaint.
+                 * If blinking gets disabled, only repaint if there's blinking stuff present
+                 * (we could further optimize by checking its current phase). */
+                if (m_text_blink_mode == VTE_TEXT_BLINK_FOCUSED ||
+                    (m_text_blink_mode == VTE_TEXT_BLINK_UNFOCUSED && m_text_blink_tag != 0)) {
+                        invalidate_all();
+                }
+
 		check_cursor_blink();
 
 		gtk_im_context_focus_in(m_im_context);
@@ -7460,6 +7468,14 @@ VteTerminalPrivate::widget_focus_out(GdkEventFocus *event)
 
 		maybe_end_selection();
 
+                /* If blinking gets enabled now, do a full repaint.
+                 * If blinking gets disabled, only repaint if there's blinking stuff present
+                 * (we could further optimize by checking its current phase). */
+                if (m_text_blink_mode == VTE_TEXT_BLINK_UNFOCUSED ||
+                    (m_text_blink_mode == VTE_TEXT_BLINK_FOCUSED && m_text_blink_tag != 0)) {
+                        invalidate_all();
+                }
+
 		gtk_im_context_focus_out(m_im_context);
 		invalidate_cursor_once();
 
@@ -10088,9 +10104,7 @@ VteTerminalPrivate::widget_draw(cairo_t *cr)
 
         /* Whether blinking text should be visible now */
         m_text_blink_state = true;
-        text_blink_enabled_now = m_text_blink_mode == VTE_TEXT_BLINK_ALWAYS ||
-                                 (m_text_blink_mode == VTE_TEXT_BLINK_FOCUSED && m_has_focus) ||
-                                 (m_text_blink_mode == VTE_TEXT_BLINK_UNFOCUSED && !m_has_focus);
+        text_blink_enabled_now = m_text_blink_mode & (m_has_focus ? VTE_TEXT_BLINK_FOCUSED : VTE_TEXT_BLINK_UNFOCUSED);
         if (text_blink_enabled_now) {
                 g_object_get(gtk_widget_get_settings(m_widget),
                         "gtk-cursor-blink-time", &blink_time,
diff --git a/src/vte/vteenums.h b/src/vte/vteenums.h
index 0c401ce4..54c4ee08 100644
--- a/src/vte/vteenums.h
+++ b/src/vte/vteenums.h
@@ -61,9 +61,9 @@ typedef enum {
 /**
  * VteTextBlinkMode:
  * @VTE_TEXT_BLINK_NEVER: Do not blink the text.
- * @VTE_TEXT_BLINK_ALWAYS: Allow blinking text. This is the default.
  * @VTE_TEXT_BLINK_FOCUSED: Allow blinking text only if the terminal is focused.
  * @VTE_TEXT_BLINK_UNFOCUSED: Allow blinking text only if the terminal is unfocused.
+ * @VTE_TEXT_BLINK_ALWAYS: Allow blinking text. This is the default.
  *
  * An enumerated type which can be used to indicate whether the terminal allows
  * the text contents to be blinked.
@@ -71,10 +71,10 @@ typedef enum {
  * Since: 0.52
  */
 typedef enum {
-        VTE_TEXT_BLINK_NEVER,
-        VTE_TEXT_BLINK_ALWAYS,
-        VTE_TEXT_BLINK_FOCUSED,
-        VTE_TEXT_BLINK_UNFOCUSED
+        VTE_TEXT_BLINK_NEVER     = 0,
+        VTE_TEXT_BLINK_FOCUSED   = 1,
+        VTE_TEXT_BLINK_UNFOCUSED = 2,
+        VTE_TEXT_BLINK_ALWAYS    = 3
 } VteTextBlinkMode;
 
 /**
