diff --git a/src/uifc/uifc32.c b/src/uifc/uifc32.c
index 74c74e7d93b8add8c19af93749a0f0cf765c20d3..cddec1d8cd61ec31e8979e517ebfde9360222197 100644
--- a/src/uifc/uifc32.c
+++ b/src/uifc/uifc32.c
@@ -1,4 +1,5 @@
 /* Curses implementation of UIFC (user interface) library based on uifc.c */
+// vi: tabstop=4
 
 /* $Id$ */
 
@@ -2554,44 +2555,47 @@ char *utimestr(time_t *intime)
 /****************************************************************************/
 void upop(char *str)
 {
-	static char sav[26*3*2];
-	char buf[26*3*2];
+	static char sav[80*3*2];
+	char buf[80*3*2];
 	int i,j,k;
+	static int width;
 
-	if(!str) {
-		/* puttext(28,12,53,14,sav); */
-		puttext((api->scrn_width-26+1)/2+1,(api->scrn_len-3+1)/2+1
-			,(api->scrn_width+26-1)/2+1,(api->scrn_len+3-1)/2+1,sav);
+	if(str == NULL) {
+		puttext((api->scrn_width-width+1)/2+1,(api->scrn_len-3+1)/2+1
+			,(api->scrn_width+width-1)/2+1,(api->scrn_len+3-1)/2+1,sav);
 		return;
 	}
-	/* gettext(28,12,53,14,sav); */
-	gettext((api->scrn_width-26+1)/2+1,(api->scrn_len-3+1)/2+1
-			,(api->scrn_width+26-1)/2+1,(api->scrn_len+3-1)/2+1,sav);
-	memset(buf,' ',25*3*2);
-	for(i=1;i<26*3*2;i+=2)
+
+	width = strlen(str);
+	if(!width)
+		return;
+	width += 7;
+	gettext((api->scrn_width-width+1)/2+1,(api->scrn_len-3+1)/2+1
+			,(api->scrn_width+width-1)/2+1,(api->scrn_len+3-1)/2+1,sav);
+	memset(buf,' ',(width-1)*3*2);
+	for(i=1;i<width*3*2;i+=2)
 		buf[i]=(api->hclr|(api->bclr<<4));
 	buf[0]=api->chars->popup_top_left;
-	for(i=2;i<25*2;i+=2)
+	for(i=2;i<(width-1)*2;i+=2)
 		buf[i]=api->chars->popup_top;
 	buf[i]=api->chars->popup_top_right; i+=2;
 	buf[i]=api->chars->popup_left; i+=2;
 	i+=2;
 	k=strlen(str);
-	i+=(((23-k)/2)*2);
+	i+=((((width-3)-k)/2)*2);
 	for(j=0;j<k;j++,i+=2) {
 		buf[i]=str[j];
 		buf[i+1]|=BLINK;
 	}
-	i=((25*2)+1)*2;
+	i=(((width-1)*2)+1)*2;
 	buf[i]=api->chars->popup_right; i+=2;
 	buf[i]=api->chars->popup_bottom_left; i+=2;
-	for(;i<((26*3)-1)*2;i+=2)
+	for(;i<(((width-1)*3)-1)*2;i+=2)
 		buf[i]=api->chars->popup_bottom;
 	buf[i]=api->chars->popup_bottom_right;
 
-	/* puttext(28,12,53,14,buf); */
-	puttext((api->scrn_width-26+1)/2+1,(api->scrn_len-3+1)/2+1
-			,(api->scrn_width+26-1)/2+1,(api->scrn_len+3-1)/2+1,buf);
+	puttext((api->scrn_width-width+1)/2+1,(api->scrn_len-3+1)/2+1
+			,(api->scrn_width+width-1)/2+1,(api->scrn_len+3-1)/2+1,buf);
 }
 
 /****************************************************************************/