diff --git a/src/conio/ciolib.c b/src/conio/ciolib.c
index 7c143edd516836d98ef7bafd838b9c099611ed97..c63cea08141b87badd9ae5781bb21aface748da1 100644
--- a/src/conio/ciolib.c
+++ b/src/conio/ciolib.c
@@ -60,6 +60,7 @@ static int lastmode=3;
 int _wscroll=1;
 int directvideo=0;
 int dont_move_cursor=0;
+int hold_refresh=0;
 static int initialized=0;
 
 int ciolib_movetext(int sx, int sy, int ex, int ey, int dx, int dy);
diff --git a/src/conio/ciolib.h b/src/conio/ciolib.h
index be8f5f67746c87405d3da732af4970c3f9a3b8c2..a8e9017f2a727dabb9164f81a530ad82b784fa72 100644
--- a/src/conio/ciolib.h
+++ b/src/conio/ciolib.h
@@ -202,6 +202,7 @@ extern cioapi_t cio_api;
 extern int _wscroll;
 extern int directvideo;
 extern int dont_move_cursor;
+extern int hold_refresh;
 
 #define _conio_kbhit()		kbhit()
 
diff --git a/src/conio/curs_cio.c b/src/conio/curs_cio.c
index e0d8487d29d502f7beb5563a413cec41c0fd2a85..6c6f2c4f1e17e923001baa503eca064e2f2c643c 100644
--- a/src/conio/curs_cio.c
+++ b/src/conio/curs_cio.c
@@ -133,7 +133,8 @@ int curs_puttext(int sx, int sy, int ex, int ey, void *fillbuf)
 	}
 	textattr(orig_attr);
 	move(oldy, oldx);
-	refresh();
+	if(!hold_refresh)
+		refresh();
 	return(1);
 }
 
@@ -632,8 +633,10 @@ int _putch(unsigned char ch, BOOL refresh_now)
 	else
 		ret=addch(cha);
 
-	if(refresh_now)
-		refresh();
+	if(!hold_refresh) {
+		if(refresh_now)
+			refresh();
+	}
 
 	return(ret);
 }
@@ -641,7 +644,8 @@ int _putch(unsigned char ch, BOOL refresh_now)
 void curs_gotoxy(int x, int y)
 {
 	move(y-1,x-1);
-	refresh();
+	if(!hold_refresh)
+		refresh();
 }
 
 void call_endwin(void)
@@ -725,7 +729,8 @@ void curs_setcursortype(int type) {
 			break;
 
 	}
-	refresh();
+	if(!hold_refresh)
+		refresh();
 }
 
 int curs_putch(int ch)