diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c
index 414f3f3575a765f4c0b7baa0e254bde7f82247fe..6e535dccb943e41042e1f058e8835629e57dd2da 100644
--- a/src/syncterm/syncterm.c
+++ b/src/syncterm/syncterm.c
@@ -2290,57 +2290,6 @@ main(int argc, char **argv)
 				dac_default[3].green = dac_default[2].green;
 				dac_default[3].blue = dac_default[0].blue;
 			}
-			if (bbs->palette_size > 0) {
-				uint32_t np[16];
-				int vm = find_vmode(screen_to_ciolib(bbs->screen_mode));
-				if (vm != -1) {
-					switch (vparams[vm].palette) {
-						case MONO_PALETTE:
-						case ATARI_PALETTE:
-							np[0] = bbs->palette[0];
-							for (i = 1; i < 16; i++)
-								np[i] = bbs->palette[1];
-							break;
-						case GREYSCALE_PALETTE:
-							np[0] = bbs->palette[0];
-							for (i = 1; i < 8; i++)
-								np[i] = bbs->palette[1];
-							np[8] = bbs->palette[2];
-							for (i = 9; i < 16; i++)
-								np[i] = bbs->palette[3];
-							break;
-						case PRESTEL_PALETTE:
-							for (i = 0; i < 8; i++) {
-								np[i] = bbs->palette[i];
-								np[i+8] = bbs->palette[i];
-							}
-							break;
-						case ATARI_PALETTE_4:
-							for (i = 0; i < 4; i++) {
-								np[i] = bbs->palette[i];
-								np[i+4] = bbs->palette[i];
-								np[i+8] = bbs->palette[i];
-								np[i+12] = bbs->palette[i];
-							}
-							break;
-						case ATARI_PALETTE_2:
-							for (i = 0; i < 2; i++) {
-								np[i] = bbs->palette[i];
-								np[i+2] = bbs->palette[i];
-								np[i+4] = bbs->palette[i];
-								np[i+6] = bbs->palette[i];
-								np[i+8] = bbs->palette[i];
-								np[i+10] = bbs->palette[i];
-								np[i+12] = bbs->palette[i];
-								np[i+14] = bbs->palette[i];
-							}
-							break;
-					}
-					for (i = 0; i < 16; i++)
-						np[i] |= 0x80000000;
-					set_modepalette(np);
-				}
-			}
 			if (doterm(bbs))
 				quitting = true;
 			dac_default[3].red = saved_red;
diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index 7b6bb9dba1015ea512dc7956b8d0f9f0ac1e03de..01d26cbaf9878fcaf5e7349abdfe558e7c5ab765 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -4169,6 +4169,66 @@ doterm(struct bbslist *bbs)
 	        get_emulation(bbs));
 	if (!cterm)
 		return false;
+	if (bbs->palette_size > 0 && (cio_api.options & CONIO_OPT_EXTENDED_PALETTE)) {
+		uint32_t np[16];
+		int vm = find_vmode(screen_to_ciolib(bbs->screen_mode));
+		if (vm != -1) {
+			switch (vparams[vm].palette) {
+				case MONO_PALETTE:
+				case ATARI_PALETTE:
+					np[0] = bbs->palette[0];
+					for (i = 1; i < 16; i++)
+						np[i] = bbs->palette[1];
+					break;
+				case GREYSCALE_PALETTE:
+					np[0] = bbs->palette[0];
+					for (i = 1; i < 8; i++)
+						np[i] = bbs->palette[1];
+					np[8] = bbs->palette[2];
+					for (i = 9; i < 16; i++)
+						np[i] = bbs->palette[3];
+					break;
+				case PRESTEL_PALETTE:
+					for (i = 0; i < 8; i++) {
+						np[i] = bbs->palette[i];
+						np[i+8] = bbs->palette[i];
+					}
+					break;
+				case ATARI_PALETTE_4:
+					for (i = 0; i < 4; i++) {
+						np[i] = bbs->palette[i];
+						np[i+4] = bbs->palette[i];
+						np[i+8] = bbs->palette[i];
+						np[i+12] = bbs->palette[i];
+					}
+					break;
+				case ATARI_PALETTE_2:
+					for (i = 0; i < 2; i++) {
+						np[i] = bbs->palette[i];
+						np[i+2] = bbs->palette[i];
+						np[i+4] = bbs->palette[i];
+						np[i+6] = bbs->palette[i];
+						np[i+8] = bbs->palette[i];
+						np[i+10] = bbs->palette[i];
+						np[i+12] = bbs->palette[i];
+						np[i+14] = bbs->palette[i];
+					}
+					break;
+			}
+			/*
+			 * TODO: Doing it this way won't last through a cterm_reset(), which
+			 *       can be triggered from ANSI.
+			 */
+			for (i = 0; i < 16; i++) {
+				uint32_t op[16];
+				get_modepalette(op);
+				setpalette(op[i] + 16,
+					((np[i] & 0x00FF0000) >> 8) | ((np[i] & 0x00FF0000) >> 16),
+					((np[i] & 0x0000FF00)) | ((np[i] & 0x0000FF00) >> 8),
+					((np[i] & 0x000000FF) << 8) | ((np[i] & 0x000000FF)));
+			}
+		}
+	}
 	if (bbs->force_lcf)
 		cterm->last_column_flag = (CTERM_LCF_FORCED | CTERM_LCF_ENABLED);
 	cterm->apc_handler = apc_handler;