diff --git a/src/conio/ciolib.c b/src/conio/ciolib.c
index 609518aed86f851330db7c619fc61c206a6246fe..6b362f7f48df7b0a6c0c0cd24880b9c4824046b5 100644
--- a/src/conio/ciolib.c
+++ b/src/conio/ciolib.c
@@ -1854,6 +1854,7 @@ CIOLIBEXPORT struct ciolib_screen * CIOLIBCALL ciolib_savescreen(void)
 	for (i=0; i<5; i++)
 		ret->fonts[i] = ciolib_getfont(i);
 	ret->flags = ciolib_getvideoflags();
+	ciolib_get_modepalette(ret->palette);
 
 	return ret;
 }
@@ -1881,6 +1882,7 @@ CIOLIBEXPORT int CIOLIBCALL ciolib_restorescreen(struct ciolib_screen *scrn)
 
 	if (ti.currmode != scrn->text_info.currmode)
 		ciolib_textmode(scrn->text_info.currmode);
+	ciolib_set_modepalette(ret->palette);
 	ciolib_vmem_puttext(1, 1, scrn->text_info.screenwidth, scrn->text_info.screenheight, scrn->vmem);
 	ciolib_textcolor(scrn->text_info.attribute);
 	ciolib_window(scrn->text_info.winleft, scrn->text_info.wintop, scrn->text_info.winright, scrn->text_info.winbottom);
diff --git a/src/conio/ciolib.h b/src/conio/ciolib.h
index 4c4c5d2879c28666396ca17ff6e5bf307fc22233..b6719941d28ae5e37dcad828bd0419ff833772d3 100644
--- a/src/conio/ciolib.h
+++ b/src/conio/ciolib.h
@@ -274,6 +274,7 @@ struct ciolib_screen {
 	struct ciolib_pixels	*pixels;
 	struct vmem_cell	*vmem;
 	struct text_info	text_info;
+	uint32_t		palette[16];
 };
 
 #define CONIO_FIRST_FREE_FONT	43