diff --git a/src/xpdoor/xpdoor.c b/src/xpdoor/xpdoor.c
index b48edf03ba50938f9e05d3a3cbad5d15d6cde238..ba6e3b10e300f3222603f9457389e7091bff6e4e 100644
--- a/src/xpdoor/xpdoor.c
+++ b/src/xpdoor/xpdoor.c
@@ -11,6 +11,7 @@
 
 struct xpd_info		xpd_info;
 static BOOL raw_write=FALSE;
+static struct cterminal *cterm;
 
 static int xpd_ansi_readbyte_cb(void)
 {
@@ -189,7 +190,7 @@ int xpd_init()
 			return(-1);
 	}
 	gettextinfo(&ti);
-	cterm_init(ti.screenheight, ti.screenwidth, 1, 1, 0, NULL, CTERM_EMULATION_ANSI_BBS);
+	cterm = cterm_init(ti.screenheight, ti.screenwidth, 1, 1, 0, NULL, NULL, NULL, CTERM_EMULATION_ANSI_BBS);
 	return 0;
 }
 
@@ -208,24 +209,24 @@ int xpd_rwrite(const char *data, int data_len)
 
 	/* Set up cterm to match conio */
 	gettextinfo(&ti);
-	cterm.xpos=ti.winleft+ti.curx-1;
-	cterm.ypos=ti.wintop+ti.cury-1;
-	cterm.attr=ti.attribute;
-	cterm.quiet=TRUE;
-	cterm.doorway_mode=xpd_info.doorway_mode;
+	cterm->xpos=ti.winleft+ti.curx-1;
+	cterm->ypos=ti.wintop+ti.cury-1;
+	cterm->attr=ti.attribute;
+	cterm->quiet=TRUE;
+	cterm->doorway_mode=xpd_info.doorway_mode;
 
 	/* Disable ciolib output for ANSI */
 	ciolib_ansi_writebyte_cb=dummy_writebyte_cb;
 
 	/* Send data to cterm */
-	cterm_write((char *)data, data_len, NULL, 0, NULL);
+	cterm_write(cterm, (char *)data, data_len, NULL, 0, NULL);
 
 	/* Send data to remote */
 	xpd_ansi_writestr_cb((char *)data,data_len);
 
 	/* Set conio to match cterm */
-	gotoxy(cterm.xpos-ti.winleft+1, cterm.ypos-ti.winright+1);
-	textattr(cterm.attr);
+	gotoxy(cterm->xpos-ti.winleft+1, cterm->ypos-ti.winright+1);
+	textattr(cterm->attr);
 
 	/* Re-enable ciolib output */
 	ciolib_ansi_writebyte_cb=xpd_ansi_writebyte_cb;