diff --git a/src/conio/bitmap_con.c b/src/conio/bitmap_con.c
index 52c6e82e39306e37a13741af704bff83164b0663..72c0556739fbc42e796b82654705278abe7b1e54 100644
--- a/src/conio/bitmap_con.c
+++ b/src/conio/bitmap_con.c
@@ -1548,8 +1548,8 @@ int bitmap_drv_init_mode(int mode, int *width, int *height)
 	/* Initialize video memory with black background, white foreground */
 	for (i = 0; i < vstat.cols*vstat.rows; ++i) {
 		vstat.vmem->vmem[i].ch = 0;
-		vstat.vmem->vmem[i].legacy_attr = 7;
-		bitmap_attr2palette_locked(7, &vstat.vmem->vmem[i].fg, &vstat.vmem->vmem[i].bg);
+		vstat.vmem->vmem[i].legacy_attr = vstat.currattr;
+		bitmap_attr2palette_locked(vstat.currattr, &vstat.vmem->vmem[i].fg, &vstat.vmem->vmem[i].bg);
 	}
 
 	pthread_mutex_lock(&screen.screenlock);
@@ -1573,8 +1573,8 @@ int bitmap_drv_init_mode(int mode, int *width, int *height)
 		current_font[i]=default_font;
 	bitmap_loadfont_locked(NULL);
 
-	cio_textinfo.attribute=7;
-	cio_textinfo.normattr=7;
+	cio_textinfo.attribute=vstat.currattr;
+	cio_textinfo.normattr=vstat.currattr;
 	cio_textinfo.currmode=mode;
 
 	if (vstat.rows > 0xff)
diff --git a/src/conio/ciolib.c b/src/conio/ciolib.c
index 27b6a34b846193e7a6ae35948cd94c3b423de372..f8be9fed72304232162b0c8d59658bf0ee4b3831 100644
--- a/src/conio/ciolib.c
+++ b/src/conio/ciolib.c
@@ -439,16 +439,20 @@ CIOLIBEXPORT int CIOLIBCALL initciolib(int mode)
 	cio_textinfo.wintop=1;
 	cio_textinfo.winright=cio_textinfo.screenwidth;
 	cio_textinfo.winbottom=cio_textinfo.screenheight;
-	/* Default C64 is Lt Blue on Black (As per CGTerm) */
+
+	/* Default C64 is Lt Blue on Dark Blue (As per Every picture ever) */
 	switch(cio_textinfo.currmode) {
 		case C64_40X25:
+			cio_textinfo.normattr=0x6e;
+			break;
 		case C128_40X25:
-		case C128_80X25:
-			cio_textinfo.normattr=14;
+			cio_textinfo.normattr=6e;
 			break;
 		default:
 			cio_textinfo.normattr=LIGHTGRAY;
+			break;
 	}
+
 	_beginthread(ciolib_mouse_thread,0,NULL);
 	return(0);
 }
@@ -826,14 +830,17 @@ CIOLIBEXPORT void CIOLIBCALL ciolib_textmode(int mode)
 	cio_textinfo.wintop=1;
 	cio_textinfo.winright=cio_textinfo.screenwidth;
 	cio_textinfo.winbottom=cio_textinfo.screenheight;
+
 	switch(cio_textinfo.currmode) {
 		case C64_40X25:
+			cio_textinfo.normattr=0x6e;
+			break;
 		case C128_40X25:
-		case C128_80X25:
-			cio_textinfo.normattr=14;
+			cio_textinfo.normattr=6e;
 			break;
 		default:
-			cio_textinfo.normattr=7;
+			cio_textinfo.normattr=LIGHTGRAY;
+			break;
 	}
 }
 
diff --git a/src/conio/cterm.c b/src/conio/cterm.c
index ce4b65bfb06912f8d09d9883ce73ed755d7f5b5c..b9d7983b38d35d10345c1cfd3c5953e5351465cf 100644
--- a/src/conio/cterm.c
+++ b/src/conio/cterm.c
@@ -36,6 +36,7 @@
 #include <string.h>
 #if defined(_WIN32)
  #include <malloc.h>	/* alloca() on Win32 */
+ #include <xpprintf.h>	/* asprintf() on Win32 */
 #endif
 
 #include <genwrap.h>
@@ -3377,6 +3378,7 @@ void CIOLIBCALL cterm_start(struct cterminal *cterm)
 		cterm->fg_color += 16;
 		cterm->bg_color += 16;
 		TEXTATTR(cterm->attr);
+		ciolib_setcolour(cterm->fg_color, cterm->bg_color);
 		SETCURSORTYPE(cterm->cursor);
 		cterm->started=1;
 		if(ti.winleft != cterm->x || ti.wintop != cterm->y || ti.winright != cterm->x+cterm->width-1 || ti.winleft != cterm->y+cterm->height-1)
diff --git a/src/conio/vidmodes.c b/src/conio/vidmodes.c
index 3487f6d5ad4ea118438a500923a815dd75cb07d5..37de128ed0d1da6d82608207c460cfd0b265c835 100644
--- a/src/conio/vidmodes.c
+++ b/src/conio/vidmodes.c
@@ -10,110 +10,110 @@
 
 struct video_params vparams[] = {
 	/* BW 40x25 */
-	{BW40, GREYSCALE_PALETTE, 40, 25, 14, 15, 16, 8, 1},
+	{BW40, GREYSCALE_PALETTE, 40, 25, 14, 15, 16, 8, 1, 7, 0},
 	/* CO 40x25 */
-	{C40, COLOUR_PALETTE, 40, 25, 14, 15, 16, 8, 1},
+	{C40, COLOUR_PALETTE, 40, 25, 14, 15, 16, 8, 1, 7, 0},
 	/* BW 80x25 */
-	{BW80, GREYSCALE_PALETTE, 80, 25, 14, 15, 16, 8, 1},
+	{BW80, GREYSCALE_PALETTE, 80, 25, 14, 15, 16, 8, 1, 7, 0},
 	/* CO 80x25 */
-	{C80, COLOUR_PALETTE, 80, 25, 14, 15, 16, 8, 1},
+	{C80, COLOUR_PALETTE, 80, 25, 14, 15, 16, 8, 1, 7, 0},
 	/* MONO */
-	{MONO, 0, 80, 25, 14, 15, 16, 8, 1},
+	{MONO, 0, 80, 25, 14, 15, 16, 8, 1, 7, 0},
 	/* CO 40x14 */
-	{C40X14, COLOUR_PALETTE, 40, 14, 14, 15, 16, 8, 1},
+	{C40X14, COLOUR_PALETTE, 40, 14, 14, 15, 16, 8, 1, 7, 0},
 	/* CO 40x21 */
-	{C40X21, COLOUR_PALETTE, 40, 21, 14, 15, 16, 8, 1},
+	{C40X21, COLOUR_PALETTE, 40, 21, 14, 15, 16, 8, 1, 7, 0},
 	/* CO 40x28 */
-	{C40X28, COLOUR_PALETTE, 40, 28, 12, 13, 14, 8, 1},
+	{C40X28, COLOUR_PALETTE, 40, 28, 12, 13, 14, 8, 1, 7, 0},
 	/* CO 40x43 */
-	{C40X43, COLOUR_PALETTE, 40, 43, 7, 7, 8, 8, 1},
+	{C40X43, COLOUR_PALETTE, 40, 43, 7, 7, 8, 8, 1, 7, 0},
 	/* CO 40x50 */
-	{C40X50, COLOUR_PALETTE, 40, 50, 7, 7, 8, 8, 1},
+	{C40X50, COLOUR_PALETTE, 40, 50, 7, 7, 8, 8, 1, 7, 0},
 	/* CO 40x60 */
-	{C40X60, COLOUR_PALETTE, 40, 60, 7, 7, 8, 8, 1},
+	{C40X60, COLOUR_PALETTE, 40, 60, 7, 7, 8, 8, 1, 7, 0},
 	/* CO 80x14 */
-	{C80X14, COLOUR_PALETTE, 80, 14, 14, 15, 16, 8, 1},
+	{C80X14, COLOUR_PALETTE, 80, 14, 14, 15, 16, 8, 1, 7, 0},
 	/* CO 80x21 */
-	{C80X21, COLOUR_PALETTE, 80, 21, 14, 15, 16, 8, 1},
+	{C80X21, COLOUR_PALETTE, 80, 21, 14, 15, 16, 8, 1, 7, 0},
 	/* CO 80x28 */
-	{C80X28, COLOUR_PALETTE, 80, 28, 12, 13, 14, 8, 1},
+	{C80X28, COLOUR_PALETTE, 80, 28, 12, 13, 14, 8, 1, 7, 0},
 	/* CO 80x30 */
-	{C80X30, COLOUR_PALETTE, 80, 30, 14, 15, 16, 8, 1},
+	{C80X30, COLOUR_PALETTE, 80, 30, 14, 15, 16, 8, 1, 7, 0},
 	/* CO 80x43 */
-	{C80X43, COLOUR_PALETTE, 80, 43, 7, 7, 8, 8, 1},
+	{C80X43, COLOUR_PALETTE, 80, 43, 7, 7, 8, 8, 1, 7, 0},
 	/* CO 80x50 */
-	{C80X50, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8, 1},
+	{C80X50, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8, 1, 7, 0},
 	/* CO 80x60 */
-	{C80X60, COLOUR_PALETTE, 80, 60, 7, 7, 8, 8, 1},
+	{C80X60, COLOUR_PALETTE, 80, 60, 7, 7, 8, 8, 1, 7, 0},
 	/* B 40x14 */
-	{BW40X14, GREYSCALE_PALETTE, 40, 14, 14, 15, 16, 8, 1},
+	{BW40X14, GREYSCALE_PALETTE, 40, 14, 14, 15, 16, 8, 1, 7, 0},
 	/* BW 40x21 */
-	{BW40X21, GREYSCALE_PALETTE, 40, 21, 14, 15, 16, 8, 1},
+	{BW40X21, GREYSCALE_PALETTE, 40, 21, 14, 15, 16, 8, 1, 7, 0},
 	/* BW 40x28 */
-	{BW40X28, GREYSCALE_PALETTE, 40, 28, 12, 13, 14, 8, 1},
+	{BW40X28, GREYSCALE_PALETTE, 40, 28, 12, 13, 14, 8, 1, 7, 0},
 	/* BW 40x43 */
-	{BW40X43, GREYSCALE_PALETTE, 40, 43, 7, 7, 8, 8, 1},
+	{BW40X43, GREYSCALE_PALETTE, 40, 43, 7, 7, 8, 8, 1, 7, 0},
 	/* BW 40x50 */
-	{BW40X50, GREYSCALE_PALETTE, 40, 50, 7, 7, 8, 8, 1},
+	{BW40X50, GREYSCALE_PALETTE, 40, 50, 7, 7, 8, 8, 1, 7, 0},
 	/* BW 40x60 */
-	{BW40X60, GREYSCALE_PALETTE, 40, 60, 7, 7, 8, 8, 1},
+	{BW40X60, GREYSCALE_PALETTE, 40, 60, 7, 7, 8, 8, 1, 7, 0},
 	/* BW 80x14 */
-	{BW80X14, GREYSCALE_PALETTE, 80, 14, 14, 15, 16, 8, 1},
+	{BW80X14, GREYSCALE_PALETTE, 80, 14, 14, 15, 16, 8, 1, 7, 0},
 	/* BW 80x21 */
-	{BW80X21, GREYSCALE_PALETTE, 80, 21, 14, 15, 16, 8, 1},
+	{BW80X21, GREYSCALE_PALETTE, 80, 21, 14, 15, 16, 8, 1, 7, 0},
 	/* BW 80x28 */
-	{BW80X28, GREYSCALE_PALETTE, 80, 28, 12, 13, 14, 8, 1},
+	{BW80X28, GREYSCALE_PALETTE, 80, 28, 12, 13, 14, 8, 1, 7, 0},
 	/* BW 80x43 */
-	{BW80X43, GREYSCALE_PALETTE, 80, 43, 7, 7, 8, 8, 1},
+	{BW80X43, GREYSCALE_PALETTE, 80, 43, 7, 7, 8, 8, 1, 7, 0},
 	/* BW 80x50 */
-	{BW80X50, GREYSCALE_PALETTE, 80, 50, 7, 7, 8, 8, 1},
+	{BW80X50, GREYSCALE_PALETTE, 80, 50, 7, 7, 8, 8, 1, 7, 0},
 	/* BW 80x60 */
-	{BW80X60, GREYSCALE_PALETTE, 80, 60, 7, 7, 8, 8, 1},
+	{BW80X60, GREYSCALE_PALETTE, 80, 60, 7, 7, 8, 8, 1, 7, 0},
 	/* MONO 80x14 */
-	{MONO14, MONO_PALETTE, 80, 14, 14, 15, 16, 8, 1},
+	{MONO14, MONO_PALETTE, 80, 14, 14, 15, 16, 8, 1, 7, 0},
 	/* MONO 80x21 */
-	{MONO21, MONO_PALETTE, 80, 21, 14, 15, 16, 8, 1},
+	{MONO21, MONO_PALETTE, 80, 21, 14, 15, 16, 8, 1, 7, 0},
 	/* MONO 80x28 */
-	{MONO28, MONO_PALETTE, 80, 28, 12, 13, 14, 8, 1},
+	{MONO28, MONO_PALETTE, 80, 28, 12, 13, 14, 8, 1, 7, 0},
 	/* MONO 80x43 */
-	{MONO43, MONO_PALETTE, 80, 43, 7, 7, 8, 8, 1},
+	{MONO43, MONO_PALETTE, 80, 43, 7, 7, 8, 8, 1, 7, 0},
 	/* MONO 80x50 */
-	{MONO50, MONO_PALETTE, 80, 50, 7, 7, 8, 8, 1},
+	{MONO50, MONO_PALETTE, 80, 50, 7, 7, 8, 8, 1, 7, 0},
 	/* MONO 80x60 */
-	{MONO60, MONO_PALETTE, 80, 60, 7, 7, 8, 8, 1},
+	{MONO60, MONO_PALETTE, 80, 60, 7, 7, 8, 8, 1, 7, 0},
 	/* Magical C4350 Mode */
-	{C4350, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8, 1},
+	{C4350, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8, 1, 7, 0},
 	/* Commodore 64 40x25 mode */
-	{C64_40X25, C64_PALETTE, 40, 25, 0, 7, 8, 8, 1},
+	{C64_40X25, C64_PALETTE, 40, 25, 0, 7, 8, 8, 1, 0x6e, CIOLIB_VIDEO_BGBRIGHT|CIOLIB_VIDEO_NOBLINK},
 	/* Commodore 128 40x25 mode */
-	{C128_40X25, COLOUR_PALETTE, 40, 25, 0, 7, 8, 8, 1},
+	{C128_40X25, COLOUR_PALETTE, 40, 25, 0, 7, 8, 8, 1, 0x82, CIOLIB_VIDEO_BGBRIGHT|CIOLIB_VIDEO_NOBLINK},
 	/* Commodore 128 80x25 mode */
-	{C128_80X25, COLOUR_PALETTE, 80, 25, 0, 7, 8, 8, 2},
+	{C128_80X25, COLOUR_PALETTE, 80, 25, 0, 7, 8, 8, 2, 7, CIOLIB_VIDEO_BGBRIGHT|CIOLIB_VIDEO_NOBLINK},
 	/* Atari 800 40x24 mode */
-	{ATARI_40X24, ATARI_PALETTE, 40, 24, 0, 7, 8, 8, 1},
+	{ATARI_40X24, ATARI_PALETTE, 40, 24, 0, 7, 8, 8, 1, 7, 0},
 	/* Atari 800 XEP80 80x25 mode */
-	{ATARI_80X25, GREYSCALE_PALETTE, 80, 25, 0, 15, 16, 8, 1},
+	{ATARI_80X25, GREYSCALE_PALETTE, 80, 25, 0, 15, 16, 8, 1, 7, 0},
 	/* VESA 21x132 mode */
-	{VESA_132X21, COLOUR_PALETTE, 132, 21, 14, 15, 16, 8, 1},
+	{VESA_132X21, COLOUR_PALETTE, 132, 21, 14, 15, 16, 8, 1, 7, 0},
 	/* VESA 25x132 mode */
-	{VESA_132X25, COLOUR_PALETTE, 132, 25, 14, 15, 16, 8, 1},
+	{VESA_132X25, COLOUR_PALETTE, 132, 25, 14, 15, 16, 8, 1, 7, 0},
 	/* VESA 28x132 mode */
-	{VESA_132X28, COLOUR_PALETTE, 132, 28, 12, 13, 14, 8, 1},
+	{VESA_132X28, COLOUR_PALETTE, 132, 28, 12, 13, 14, 8, 1, 7, 0},
 	/* VESA 30x132 mode */
-	{VESA_132X30, COLOUR_PALETTE, 132, 30, 14, 15, 16, 8, 1},
+	{VESA_132X30, COLOUR_PALETTE, 132, 30, 14, 15, 16, 8, 1, 7, 0},
 	/* VESA 34x132 mode */
-	{VESA_132X34, COLOUR_PALETTE, 132, 34, 12, 13, 14, 8, 1},
+	{VESA_132X34, COLOUR_PALETTE, 132, 34, 12, 13, 14, 8, 1, 7, 0},
 	/* VESA 43x132 mode */
-	{VESA_132X43, COLOUR_PALETTE, 132, 43, 7, 7, 8, 8, 1},
+	{VESA_132X43, COLOUR_PALETTE, 132, 43, 7, 7, 8, 8, 1, 7, 0},
 	/* VESA 50x132 mode */
-	{VESA_132X50, COLOUR_PALETTE, 132, 50, 7, 7, 8, 8, 1},
+	{VESA_132X50, COLOUR_PALETTE, 132, 50, 7, 7, 8, 8, 1, 7, 0},
 	/* VESA 60x132 mode */
-	{VESA_132X60, COLOUR_PALETTE, 132, 60, 7, 7, 8, 8, 1},
+	{VESA_132X60, COLOUR_PALETTE, 132, 60, 7, 7, 8, 8, 1, 7, 0},
 	/* Awesome modes */
-	{ST132X37_16_9, COLOUR_PALETTE, 132, 37, 14, 15, 16, 8, 1},
-	{ST132X52_5_4, COLOUR_PALETTE, 132, 52, 14, 15, 16, 8, 1},
+	{ST132X37_16_9, COLOUR_PALETTE, 132, 37, 14, 15, 16, 8, 1, 7, 0},
+	{ST132X52_5_4, COLOUR_PALETTE, 132, 52, 14, 15, 16, 8, 1, 7, 0},
 	/* Custom mode */
-	{CIOLIB_MODE_CUSTOM, COLOUR_PALETTE, 80, 25, 14, 15, 16, 8, 1},
+	{CIOLIB_MODE_CUSTOM, COLOUR_PALETTE, 80, 25, 14, 15, 16, 8, 1, 7, 0},
 };
 
 uint32_t palettes[5][16] = {
@@ -310,11 +310,11 @@ int load_vmode(struct video_stats *vs, int mode)
 	vs->curs_visible=1;
 	vs->curs_row=1;
 	vs->curs_col=1;
-	vs->bright_background=0;
-	vs->no_bright=0;
-	vs->bright_altcharset=0;
-	vs->no_blink=0;
-	vs->blink_altcharset=0;
+	vs->bright_background=vparams[i].flags & CIOLIB_VIDEO_BGBRIGHT;
+	vs->no_bright=vparams[i].flags & CIOLIB_VIDEO_NOBRIGHT;
+	vs->bright_altcharset=vparams[i].flags & CIOLIB_VIDEO_ALTCHARS;
+	vs->no_blink=vparams[i].flags & CIOLIB_VIDEO_NOBLINK;
+	vs->blink_altcharset=vparams[i].flags & CIOLIB_VIDEO_BLINKALTCHARS;
 	if(vs->curs_row < 0)
 		vs->curs_row=0;
 	if(vs->curs_row >= vparams[i].rows)
@@ -328,5 +328,6 @@ int load_vmode(struct video_stats *vs, int mode)
 	vs->charwidth=vparams[i].charwidth;
 	vs->mode=mode;
 	vs->vmultiplier=vparams[i].vmultiplier;
+	vs->currattr = vparams[i].default_attr;
 	return(0);
 }
diff --git a/src/conio/vidmodes.h b/src/conio/vidmodes.h
index d7e4170ee54e51426d8c9315206c0ab80b0d3531..303786358e980bd0deb7b9ee61b3070e90505262 100644
--- a/src/conio/vidmodes.h
+++ b/src/conio/vidmodes.h
@@ -62,6 +62,8 @@ struct  video_params {
 	int charheight;
 	int charwidth;
 	int	vmultiplier;
+	int	default_attr;
+	int	flags;
 };
 
 struct vstat_vmem {