diff --git a/src/uifc/uifc.h b/src/uifc/uifc.h
index 1e2d9b5822843d62cae35b49f9bb83a021585362..4e289e666d90e5aa8508da7982e948504ed08941 100644
--- a/src/uifc/uifc.h
+++ b/src/uifc/uifc.h
@@ -101,9 +101,15 @@
 #define MSK_OFF 	0x0fffffff
 #define MSK_INS 	0x10000000
 #define MSK_DEL 	0x20000000
-#define MSK_GET 	0x30000000
-#define MSK_PUT 	0x40000000
-#define MSK_EDIT 	0x50000000
+#define MSK_COPY 	0x30000000
+#define MSK_CUT 	0x40000000
+#define MSK_PASTE 	0x50000000
+#define MSK_EDIT 	0x60000000
+
+/* Legacy terms (get/put instead of copy/paste) */
+#define MSK_GET		MSK_COPY
+#define MSK_PUT		MSK_PASTE
+
 /* Don't forget, negative return values are used for extended keys (if WIN_EXTKEYS used)! */
 #define MAX_OPLN	75		/* Maximum length of each option per menu call */
 #define MAX_BUFS	7		/* Maximum number of screen buffers to save */
@@ -124,7 +130,7 @@
 #define UIFC_MONO	(1<<2)	/* Force monochrome mode */
 #define UIFC_COLOR	(1<<3)	/* Force color mode */
 #define UIFC_IBM	(1<<4)	/* Force use of IBM charset	*/
-#define UIFC_NOCTRL	(1<<5)	/* Don't allow useage of CTRL keys for movement 
+#define UIFC_NOCTRL	(1<<5)	/* Don't allow usage of CTRL keys for movement 
 							 * etc in menus (Still available in text boxes) */
 #define UIFC_NHM	(1<<6)	/* Don't hide the mouse pointer */
 
diff --git a/src/uifc/uifc32.c b/src/uifc/uifc32.c
index 8f6a4db835a73ec04ca1790dc7c79ba53363fd68..c191a3b3dfd50930e360c321ec29c597b8e9daf1 100644
--- a/src/uifc/uifc32.c
+++ b/src/uifc/uifc32.c
@@ -1161,9 +1161,10 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 							api->savnum--;
 							if(!(api->mode&UIFC_NHM))
 								uifc_mouse_disable();
-							puttext(sav[api->savnum].left,sav[api->savnum].top
-								,sav[api->savnum].right,sav[api->savnum].bot
-								,sav[api->savnum].buf);
+							if(sav[api->savnum].buf != NULL)
+								puttext(sav[api->savnum].left,sav[api->savnum].top
+									,sav[api->savnum].right,sav[api->savnum].bot
+									,sav[api->savnum].buf);
 							if(!(api->mode&UIFC_NHM))
 								uifc_mouse_enable();
 							FREE_AND_NULL(sav[api->savnum].buf);
@@ -1237,6 +1238,10 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 					if(!(api->mode&UIFC_NOCTRL))
 						gotkey=CIO_KEY_F(5);	/* copy */
 					break;
+				case CTRL_X:
+					if(!(api->mode&UIFC_NOCTRL))
+						gotkey=CIO_KEY_SHIFT_DC;	/* cut */
+					break;
 				case CTRL_V:
 					if(!(api->mode&UIFC_NOCTRL))
 						gotkey=CIO_KEY_F(6);	/* paste */
@@ -1568,19 +1573,26 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 							}
 							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);
+								if(sav[api->savnum].buf != NULL)
+									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;
-					case CIO_KEY_F(5):	/* F5 - Copy */
+					case CIO_KEY_F(5):		/* F5 - Copy */
+					case CIO_KEY_CTRL_IC:	/* Ctrl-Insert */
 						if(mode&WIN_GET && !(mode&WIN_XTR && (*cur)==opts-1))
 							return((*cur)|MSK_GET);
 						break;
-					case CIO_KEY_F(6):	/* F6 - Paste */
+					case CIO_KEY_SHIFT_DC:	/* Shift-Del: Cut */
+						if(mode&WIN_GET && !(mode&WIN_XTR && (*cur) == opts - 1))
+							return((*cur) | MSK_CUT);
+						break;
+					case CIO_KEY_F(6):		/* F6 - Paste */
+					case CIO_KEY_SHIFT_IC:	/* Shift-Insert */
 						if(mode&WIN_PUT && (mode&WIN_PUTXTR || !(mode&WIN_XTR && (*cur)==opts-1)))
 							return((*cur)|MSK_PUT);
 						break;
@@ -1602,9 +1614,10 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 							}
 							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);
+								if(sav[api->savnum].buf != NULL)
+									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) {
@@ -1633,9 +1646,10 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 							}
 							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);
+								if (sav[api->savnum].buf != NULL)
+									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); 
@@ -1763,9 +1777,10 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 							}
 							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);
+								if (sav[api->savnum].buf != NULL)
+									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(mode&WIN_XTR && (*cur)==opts-1)
@@ -1785,9 +1800,10 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
 							}
 							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);
+								if (sav[api->savnum].buf != NULL)
+									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(-1);