diff --git a/src/uifc/uifc32.c b/src/uifc/uifc32.c
index a69232575dccb246eda22e952a8cba4aa2dedb2d..5612d15f592c0f8e6381a189acedb7bd8d577ee8 100644
--- a/src/uifc/uifc32.c
+++ b/src/uifc/uifc32.c
@@ -1364,7 +1364,9 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 						if(mode&WIN_XTR && (*cur)==opts-1)	/* can't edit */
 							break;							/* extra line */
 						if(mode&WIN_EDIT) {
-							if(mode&WIN_EDITACT) {
+							if(mode&WIN_SAV)
+								api->savnum++;
+							if(mode&WIN_ACT) {
 								gettext(s_left+left,s_top+top,s_left
 									+left+width-1,s_top+top+height-1,tmp_buffer);
 								for(i=1;i<(width*height*2);i+=2)
@@ -1372,9 +1374,17 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 								j=(((y-top)*width)*2)+7+((width-hbrdrsize-2)*2);
 								for(i=(((y-top)*width)*2)+7;i<j;i+=2)
 									tmp_buffer[i]=hclr|(cclr<<4);
+
 								puttext(s_left+left,s_top+top,s_left
 									+left+width-1,s_top+top+height-1,tmp_buffer);
 							}
+							else if(mode&WIN_SAV) {
+								api->savnum--;
+								puttext(sav[api->savnum].left,sav[api->savnum].top
+									,sav[api->savnum].right,sav[api->savnum].bot
+									,sav[api->savnum].buf);
+								FREE_AND_NULL(sav[api->savnum].buf);
+							}
 							return((*cur)|MSK_EDIT); 
 						}
 						break;
@@ -1388,19 +1398,27 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 						break;
 					case CIO_KEY_IC:	/* insert */
 						if(mode&WIN_INS) {
+							if(mode&WIN_SAV)
+								api->savnum++;
 							if(mode&WIN_INSACT) {
 								gettext(s_left+left,s_top+top,s_left
 									+left+width-1,s_top+top+height-1,tmp_buffer);
 								for(i=1;i<(width*height*2);i+=2)
 									tmp_buffer[i]=lclr|(cclr<<4);
-								if(opts) {
-									j=(((y-top)*width)*2)+7+((width-hbrdrsize-2)*2);
-									for(i=(((y-top)*width)*2)+7;i<j;i+=2)
-										tmp_buffer[i]=hclr|(cclr<<4); 
-								}
+								j=(((y-top)*width)*2)+7+((width-hbrdrsize-2)*2);
+								for(i=(((y-top)*width)*2)+7;i<j;i+=2)
+									tmp_buffer[i]=hclr|(cclr<<4);
+
 								puttext(s_left+left,s_top+top,s_left
 									+left+width-1,s_top+top+height-1,tmp_buffer);
 							}
+							else if(mode&WIN_SAV) {
+								api->savnum--;
+								puttext(sav[api->savnum].left,sav[api->savnum].top
+									,sav[api->savnum].right,sav[api->savnum].bot
+									,sav[api->savnum].buf);
+								FREE_AND_NULL(sav[api->savnum].buf);
+							}
 							if(!opts) {
 								return(MSK_INS); 
 							}
@@ -1411,6 +1429,8 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 						if(mode&WIN_XTR && (*cur)==opts-1)	/* can't delete */
 							break;							/* extra line */
 						if(mode&WIN_DEL) {
+							if(mode&WIN_SAV)
+								api->savnum++;
 							if(mode&WIN_DELACT) {
 								gettext(s_left+left,s_top+top,s_left
 									+left+width-1,s_top+top+height-1,tmp_buffer);
@@ -1419,9 +1439,17 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 								j=(((y-top)*width)*2)+7+((width-hbrdrsize-2)*2);
 								for(i=(((y-top)*width)*2)+7;i<j;i+=2)
 									tmp_buffer[i]=hclr|(cclr<<4);
+
 								puttext(s_left+left,s_top+top,s_left
 									+left+width-1,s_top+top+height-1,tmp_buffer);
 							}
+							else if(mode&WIN_SAV) {
+								api->savnum--;
+								puttext(sav[api->savnum].left,sav[api->savnum].top
+									,sav[api->savnum].right,sav[api->savnum].bot
+									,sav[api->savnum].buf);
+								FREE_AND_NULL(sav[api->savnum].buf);
+							}
 							return((*cur)|MSK_DEL); 
 						}
 						break;