diff --git a/src/ui/menu_proc.cpp b/src/ui/menu_proc.cpp
index 5b50a9d3c..2dd1ae41a 100644
--- a/src/ui/menu_proc.cpp
+++ b/src/ui/menu_proc.cpp
@@ -30,6 +30,7 @@
 ----------------------------------------------------------------------------*/
 
 #include <stdio.h>
+#include <stdlib.h>
 
 #include "freecraft.h"
 
@@ -695,6 +696,8 @@ inkey:
 		    break;
 		case 9:
 		    goto normkey;
+		case '~':		// ~ are quotes
+		    return;		// Just ignore them
 		case 'x':
 		case 'X':
 		    if( (KeyModifiers&ModifierAlt) ) {
@@ -940,8 +943,12 @@ local void MenuHandleMouseMove(int x,int y)
     int h, w, i, j, n, xs, ys;
     Menuitem *mi;
     Menu *menu;
-    int RedrawFlag = 0;
+    int ox;
+    int oy;
+    int redraw_flag;
 
+    ox = CursorX;
+    oy = CursorY;			// Old position for rel movement.
     HandleCursorMove(&x,&y);
 
     if (CurrentMenu == NULL) {
@@ -955,8 +962,9 @@ local void MenuHandleMouseMove(int x,int y)
 
     n = menu->nitems;
     MenuButtonUnderCursor = -1;
+    redraw_flag = 0;
 
-    /* check active (popped-up) pulldown first, as it may overlay other menus! */
+    // check active (popped-up) pulldown first, as it may overlay other menus!
     mi = menu->items;
     for (i = 0; i < n; ++i) {
 	if (!(mi->flags&MenuButtonDisabled)) {
@@ -973,7 +981,7 @@ local void MenuHandleMouseMove(int x,int y)
 		    j = (y - ys) / h;
 		    if (j >= 0 && j < mi->d.pulldown.noptions && j != mi->d.pulldown.cursel) {
 			mi->d.pulldown.cursel = j;
-			RedrawFlag = 1;
+			redraw_flag = 1;
 			if (mi->d.pulldown.action) {
 			    (*mi->d.pulldown.action)(mi, mi->d.pulldown.cursel);
 			}
@@ -996,7 +1004,7 @@ local void MenuHandleMouseMove(int x,int y)
 			if (x < xs || x > xs + mi->d.gem.xsize || y < ys || y > ys + mi->d.gem.ysize) {
 			    if (!(mi->flags&MenuButtonClicked)) {
 				if (mi->flags&MenuButtonActive) {
-				    RedrawFlag = 1;
+				    redraw_flag = 1;
 				    mi->flags &= ~MenuButtonActive;
 				}
 			    }
@@ -1009,7 +1017,7 @@ local void MenuHandleMouseMove(int x,int y)
 			if (x < xs || x > xs + mi->d.button.xsize || y < ys || y > ys + mi->d.button.ysize) {
 			    if (!(mi->flags&MenuButtonClicked)) {
 				if (mi->flags&MenuButtonActive) {
-				    RedrawFlag = 1;
+				    redraw_flag = 1;
 				    mi->flags &= ~MenuButtonActive;
 				}
 			    }
@@ -1019,10 +1027,11 @@ local void MenuHandleMouseMove(int x,int y)
 		    case MI_TYPE_INPUT:
 			xs = menu->x + mi->xofs;
 			ys = menu->y + mi->yofs;
-			if (x<xs || x>xs + mi->d.input.xsize || y<ys || y>ys + mi->d.input.ysize) {
+			if (x<xs || x>xs + mi->d.input.xsize
+				|| y<ys || y>ys + mi->d.input.ysize) {
 			    if (!(mi->flags&MenuButtonClicked)) {
 				if (mi->flags&MenuButtonActive) {
-				    RedrawFlag = 1;
+				    redraw_flag = 1;
 				    mi->flags &= ~MenuButtonActive;
 				}
 			    }
@@ -1039,7 +1048,7 @@ local void MenuHandleMouseMove(int x,int y)
 			if (x<xs || x>xs + mi->d.pulldown.xsize || y<ys || y>ys + mi->d.pulldown.ysize) {
 			    if (!(mi->flags&MenuButtonClicked)) {
 				if (mi->flags&MenuButtonActive) {
-				    RedrawFlag = 1;
+				    redraw_flag = 1;
 				    mi->flags &= ~MenuButtonActive;
 				}
 			    }
@@ -1052,7 +1061,7 @@ local void MenuHandleMouseMove(int x,int y)
 			if (x < xs || x > xs + mi->d.listbox.xsize || y < ys || y > ys + mi->d.listbox.ysize) {
 			    if (!(mi->flags&MenuButtonClicked)) {
 				if (mi->flags&MenuButtonActive) {
-				    RedrawFlag = 1;
+				    redraw_flag = 1;
 				    mi->flags &= ~MenuButtonActive;
 				}
 			    }
@@ -1066,7 +1075,7 @@ local void MenuHandleMouseMove(int x,int y)
 			    if (mi->d.listbox.cursel != mi->d.listbox.curopt) {
 				mi->d.listbox.dohandler = 0;
 				mi->d.listbox.curopt = mi->d.listbox.cursel;
-				RedrawFlag = 1;
+				redraw_flag = 1;
 			    }
 			}
 			break;
@@ -1076,7 +1085,7 @@ local void MenuHandleMouseMove(int x,int y)
 			if (x < xs || x > xs + mi->d.vslider.xsize || y < ys || y > ys + mi->d.vslider.ysize) {
 			    if (!(mi->flags&MenuButtonClicked)) {
 				if (mi->flags&MenuButtonActive) {
-				    RedrawFlag = 1;
+				    redraw_flag = 1;
 				    mi->flags &= ~MenuButtonActive;
 				}
 			    }
@@ -1121,7 +1130,7 @@ local void MenuHandleMouseMove(int x,int y)
 			if (x < xs || x > xs + mi->d.hslider.xsize || y < ys || y > ys + mi->d.hslider.ysize) {
 			    if (!(mi->flags&MenuButtonClicked)) {
 				if (mi->flags&MenuButtonActive) {
-				    RedrawFlag = 1;
+				    redraw_flag = 1;
 				    mi->flags &= ~MenuButtonActive;
 				}
 			    }
@@ -1171,19 +1180,40 @@ local void MenuHandleMouseMove(int x,int y)
 		    case MI_TYPE_LISTBOX:
 		    case MI_TYPE_VSLIDER:
 		    case MI_TYPE_HSLIDER:
-		    case MI_TYPE_INPUT:
 			if (!(mi->flags&MenuButtonActive)) {
-			    RedrawFlag = 1;
+			    redraw_flag = 1;
 			    mi->flags |= MenuButtonActive;
 			}
 			MenuButtonUnderCursor = i;
 		    default:
 			break;
+		    case MI_TYPE_INPUT:
+			if (!(mi->flags&MenuButtonActive)) {
+			    redraw_flag = 1;
+			    mi->flags |= MenuButtonActive;
+			}
+			if (MouseButtons & LeftButton
+				&& mi->flags & MenuButtonSelected) {
+			    if (mi->d.input.buffer && *mi->d.input.buffer) {
+				char* s;
+
+				j = strtol(mi->d.input.buffer, &s, 0);
+				if (!*s || s[0]=='~' ) {
+				    mi->d.input.nch =
+					sprintf(mi->d.input.buffer, "%d~!_",
+						j + x - ox
+						+ (y - oy)*1000);
+				    redraw_flag = 1;
+				}
+			    }
+			}
+			MenuButtonUnderCursor = i;
+			break;
 		}
 	    }
 	}
     }
-    if (RedrawFlag) {
+    if (redraw_flag) {
 	MustRedraw |= RedrawMenu;
     }
 }
@@ -1281,7 +1311,7 @@ local void MenuHandleButtonUp(unsigned b)
     int i, n;
     Menuitem *mi;
     Menu *menu;
-    int RedrawFlag = 0;
+    int redraw_flag = 0;
 
     if (CurrentMenu == NULL) {
 	return;
@@ -1299,7 +1329,7 @@ local void MenuHandleButtonUp(unsigned b)
 	    switch (mi->mitype) {
 		case MI_TYPE_GEM:
 		    if (mi->flags&MenuButtonClicked) {
-			RedrawFlag = 1;
+			redraw_flag = 1;
 			mi->flags &= ~MenuButtonClicked;
 			if (MenuButtonUnderCursor == i) {
 			    MenuButtonUnderCursor = -1;
@@ -1316,7 +1346,7 @@ local void MenuHandleButtonUp(unsigned b)
 		    break;
 		case MI_TYPE_BUTTON:
 		    if (mi->flags&MenuButtonClicked) {
-			RedrawFlag = 1;
+			redraw_flag = 1;
 			mi->flags &= ~MenuButtonClicked;
 			if (MenuButtonUnderCursor == i) {
 			    MenuButtonUnderCursor = -1;
@@ -1328,7 +1358,7 @@ local void MenuHandleButtonUp(unsigned b)
 		    break;
 		case MI_TYPE_PULLDOWN:
 		    if (mi->flags&MenuButtonClicked) {
-			RedrawFlag = 1;
+			redraw_flag = 1;
 			mi->flags &= ~MenuButtonClicked;
 			if (MenuButtonUnderCursor == i) {
 			    MenuButtonUnderCursor = -1;
@@ -1346,7 +1376,7 @@ local void MenuHandleButtonUp(unsigned b)
 		    break;
 		case MI_TYPE_LISTBOX:
 		    if (mi->flags&MenuButtonClicked) {
-			RedrawFlag = 1;
+			redraw_flag = 1;
 			mi->flags &= ~MenuButtonClicked;
 			if (MenuButtonUnderCursor == i) {
 			    MenuButtonUnderCursor = -1;
@@ -1358,21 +1388,21 @@ local void MenuHandleButtonUp(unsigned b)
 		    break;
 		case MI_TYPE_INPUT:
 		    if (mi->flags&MenuButtonClicked) {
-			RedrawFlag = 1;
+			redraw_flag = 1;
 			mi->flags &= ~MenuButtonClicked;
 			// MAYBE ADD HERE
 		    }
 		    break;
 		case MI_TYPE_VSLIDER:
 		    if (mi->flags&MenuButtonClicked) {
-			RedrawFlag = 1;
+			redraw_flag = 1;
 			mi->flags &= ~MenuButtonClicked;
 			mi->d.vslider.cflags = 0;
 		    }
 		    break;
 		case MI_TYPE_HSLIDER:
 		    if (mi->flags&MenuButtonClicked) {
-			RedrawFlag = 1;
+			redraw_flag = 1;
 			mi->flags &= ~MenuButtonClicked;
 			mi->d.hslider.cflags = 0;
 		    }
@@ -1382,7 +1412,7 @@ local void MenuHandleButtonUp(unsigned b)
 	    }
 	}
     }
-    if (RedrawFlag) {
+    if (redraw_flag) {
 	MustRedraw |= RedrawMenu;
 
 	MenuHandleMouseMove(CursorX,CursorY);