diff -Naur libzvt-2.0.1-orig/libzvt/update.c libzvt-2.0.1-bmg/libzvt/update.c
--- libzvt-2.0.1-orig/libzvt/update.c	Tue Jun 11 18:04:32 2002
+++ libzvt-2.0.1-bmg/libzvt/update.c	Mon Oct  7 22:14:45 2002
@@ -896,6 +934,15 @@
   s = (struct vt_line *)vt_list_index(sy<0?(&vx->vt.scrollback):(&vx->vt.lines), sy);
   e = (struct vt_line *)vt_list_index(ey<0?(&vx->vt.scrollback):(&vx->vt.lines), ey);
 
+  /* make sure initial point is in selection */
+  if (ey<vx->selinity || (ey==vx->selinity && ex<=vx->selinitx)) {
+    ex = vx->selinitx+1;
+    ey = vx->selinity;
+  } else if (sy>vx->selinity || (sy==vx->selinity && sx>vx->selinitx)) {
+    sx = vx->selinitx;
+    sy = vx->selinity;
+  }
+
   /* if we didn't find it ... umm? FIXME: do something? */
   switch(vx->selectiontype & VT_SELTYPE_MASK) {
   case VT_SELTYPE_LINE:
diff -Naur libzvt-2.0.1-orig/libzvt/vtx.h libzvt-2.0.1-bmg/libzvt/vtx.h
--- libzvt-2.0.1-orig/libzvt/vtx.h	Thu Dec  6 23:58:55 2001
+++ libzvt-2.0.1-bmg/libzvt/vtx.h	Mon Oct  7 22:09:18 2002
@@ -82,6 +82,7 @@
 
   int selstartx, selstarty;
   int selendx, selendy;
+  int selinitx, selinity;
 
   /* previously rendered values */
   int selstartxold, selstartyold;
diff -Naur libzvt-2.0.1-orig/libzvt/zvtterm.c libzvt-2.0.1-bmg/libzvt/zvtterm.c
--- libzvt-2.0.1-orig/libzvt/zvtterm.c	Mon Jun  3 18:59:26 2002
+++ libzvt-2.0.1-bmg/libzvt/zvtterm.c	Mon Oct  7 22:04:54 2002
@@ -1733,6 +1733,8 @@
     vx->selstarty = y;
     vx->selendx = x;
     vx->selendy = y;
+    vx->selinitx = x;
+    vx->selinity = y;
     
     /* reset 'drawn' screen (to avoid mis-refreshes) */
     if (!vx->selected) {

