diff --git a/src/vte-private.h b/src/vte-private.h
index af4edc3..1b5bb98 100644
--- a/src/vte-private.h
+++ b/src/vte-private.h
@@ -64,7 +64,7 @@ G_BEGIN_DECLS
  *   Colors set by SGR 256-color extension (38/48;5;index).
  *   These are direct indices into the color palette.
  *
- * 256 .. VTE_PALETTE_SIZE - 1 (261):
+ * 256 .. VTE_PALETTE_SIZE - 1 (262):
  *   Special values, such as default colors.
  *   These are direct indices into the color palette.
  *
@@ -367,7 +367,6 @@ struct _VteTerminalPrivate {
 	 * when realizing. */
 	struct _vte_draw *draw;
 
-	gboolean palette_initialized;
 	VtePaletteColor palette[VTE_PALETTE_SIZE];
 
 	/* Mouse cursors. */
diff --git a/src/vte.c b/src/vte.c
index 3ffd572..556fbc3 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -2901,12 +2901,7 @@ vte_terminal_set_colors(VteTerminal *terminal,
 
 		/* Set up the color entry. */
 		_vte_terminal_set_color_internal(terminal, i, VTE_COLOR_SOURCE_API, unset ? NULL : &color);
-		if (!terminal->pvt->palette_initialized)
-			terminal->pvt->palette[i].sources[VTE_COLOR_SOURCE_ESCAPE].is_set = FALSE;
 	}
-
-	/* Track that we had a color palette set. */
-	terminal->pvt->palette_initialized = TRUE;
 }
 
 static GdkColor *
@@ -8571,6 +8566,7 @@ vte_terminal_init(VteTerminal *terminal)
 {
 	VteTerminalPrivate *pvt;
 	GtkStyleContext *context;
+	int i;
 
 	_vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_init()\n");
 
@@ -8618,6 +8614,11 @@ vte_terminal_init(VteTerminal *terminal)
 	pvt->screen = &terminal->pvt->normal_screen;
 	_vte_terminal_set_default_attributes(terminal);
 
+	/* Set up the desired palette. */
+	vte_terminal_set_default_colors(terminal);
+	for (i = 0; i < VTE_PALETTE_SIZE; i++)
+		terminal->pvt->palette[i].sources[VTE_COLOR_SOURCE_ESCAPE].is_set = FALSE;
+
 	/* Set up I/O encodings. */
 	pvt->iso2022 = _vte_iso2022_state_new(pvt->encoding,
 					      &_vte_terminal_codeset_changed_cb,
@@ -9295,11 +9296,6 @@ vte_terminal_realize(GtkWidget *widget)
 	/* Set the realized flag. */
 	gtk_widget_set_realized (widget, TRUE);
 
-	/* Set up the desired palette. */
-	if (!terminal->pvt->palette_initialized) {
-		vte_terminal_set_default_colors(terminal);
-	}
-
 	/* Set up input method support.  FIXME: do we need to handle the
 	 * "retrieve-surrounding" and "delete-surrounding" events? */
 	if (terminal->pvt->im_context != NULL) {
@@ -13908,8 +13904,7 @@ vte_terminal_reset(VteTerminal *terminal,
 		g_hash_table_destroy(pvt->dec_saved);
 		pvt->dec_saved = g_hash_table_new(NULL, NULL);
 	}
-	/* Reset the color palette. Only the 256 indexed colors, not the special ones.
-	 * (XTerm doesn't reset the cursor color, the others are not alterable by escapes in vte.) */
+	/* Reset the color palette. Only the 256 indexed colors, not the special ones, as per xterm. */
 	for (i = 0; i < 256; i++)
 		terminal->pvt->palette[i].sources[VTE_COLOR_SOURCE_ESCAPE].is_set = FALSE;
 	/* Reset the default attributes.  Reset the alternate attribute because
