diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h
index 300ba65..0da2a12 100644
--- a/src/cmd/acme/dat.h
+++ b/src/cmd/acme/dat.h
@@ -186,6 +186,7 @@
 	Row		*row;
 	Column	*col;
 
+	uint	iq1;	/* last input position */
 	uint	eq0;	/* start of typing for ESC */
 	uint	cq0;	/* cache position */
 	int		ncache;	/* storage for insert */
diff --git a/src/cmd/acme/exec.c b/src/cmd/acme/exec.c
index ad4da00..8262be4 100644
--- a/src/cmd/acme/exec.c
+++ b/src/cmd/acme/exec.c
@@ -960,8 +960,9 @@
 	if(textreadc(t, t->file->b.nc-1) != '\n'){
 		textinsert(t, t->file->b.nc, Lnl, 1, TRUE);
 		textsetselect(t, t->file->b.nc, t->file->b.nc);
-		textshow(t, t->q1, t->q1, 1);
 	}
+	t->iq1 = t->q1;
+	textshow(t, t->q1, t->q1, 1);
 }
 
 void
diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c
index 7ea4131..ed0fc0c 100644
--- a/src/cmd/acme/text.c
+++ b/src/cmd/acme/text.c
@@ -379,6 +379,8 @@
 			}
 					
 	}
+	if(q0 < t->iq1)
+		t->iq1 += n;
 	if(q0 < t->q1)
 		t->q1 += n;
 	if(q0 < t->q0)
@@ -472,6 +474,8 @@
 				}
 			}
 	}
+	if(t->iq1 < t->q0)
+		t->iq1 -= min(n, t->iq1-q0);
 	if(q0 < t->q0)
 		t->q0 -= min(n, t->q0-q0);
 	if(q0 < t->q1)
@@ -714,11 +718,19 @@
 		return;
 	case Khome:
 		typecommit(t);
-		textshow(t, 0, 0, FALSE);
+		if(t->org > t->iq1) {
+			q0 = textbacknl(t, t->iq1, 1);
+			textsetorigin(t, q0, TRUE);
+		} else
+			textshow(t, 0, 0, FALSE);
 		return;
 	case Kend:
 		typecommit(t);
-		textshow(t, t->file->b.nc, t->file->b.nc, FALSE);
+		if(t->iq1 > t->org+t->fr.nchars) {
+			q0 = textbacknl(t, t->iq1, 1);
+			textsetorigin(t, q0, TRUE);
+		} else
+			textshow(t, t->file->b.nc, t->file->b.nc, FALSE);
 		return;
 	case 0x01:	/* ^A: beginning of line */
 		typecommit(t);
@@ -771,6 +783,7 @@
 		}
 		cut(t, t, nil, TRUE, TRUE, nil, 0);
 		textshow(t, t->q0, t->q0, 1);
+		t->iq1 = t->q0;
 		return;
 	case Kcmd+'v':	/* %V: paste */
 		typecommit(t);
@@ -780,6 +793,7 @@
 		}
 		paste(t, t, nil, TRUE, FALSE, nil, 0);
 		textshow(t, t->q0, t->q1, 1);
+		t->iq1 = t->q1;
 		return;
 	}
 	if(t->q1 > t->q0){
@@ -802,6 +816,7 @@
 			textsetselect(t, t->eq0, t->q0);
 		if(t->ncache > 0)
 			typecommit(t);
+		t->iq1 = t->q0;
 		return;
 	case 0x08:	/* ^H: erase character */
 	case 0x15:	/* ^U: erase line */
@@ -844,6 +859,7 @@
 		}
 		for(i=0; i<t->file->ntext; i++)
 			textfill(t->file->text[i]);
+		t->iq1 = t->q0;
 		return;
 	case '\n':
 		if(t->w->autoindent){
@@ -895,6 +911,7 @@
 	textsetselect(t, t->q0+nr, t->q0+nr);
 	if(r=='\n' && t->w!=nil)
 		wincommit(t->w, t);
+	t->iq1 = t->q0;
 }
 
 void
diff --git a/src/cmd/acme/xfid.c b/src/cmd/acme/xfid.c
index 18b06dd..a1cc384 100644
--- a/src/cmd/acme/xfid.c
+++ b/src/cmd/acme/xfid.c
@@ -395,6 +395,14 @@
 	winunlock(w);
 }
 
+static int
+shouldscroll(Text *t, uint q0, int qid)
+{
+	if(qid == Qcons)
+		return TRUE;
+	return t->org <= q0 && q0 <= t->org+t->fr.nchars;
+}
+
 void
 xfidwrite(Xfid *x)
 {
@@ -510,7 +518,7 @@
 		if(tq1 >= q0)
 			tq1 += nr;
 		textsetselect(t, tq0, tq1);
-		if(t->org <= q0 && q0 <= t->org+t->fr.nchars)
+		if(shouldscroll(t, q0, qid))
 			textshow(t, q0+nr, q0+nr, 0);
 		textscrdraw(t);
 		winsettag(w);
@@ -568,7 +576,7 @@
 				}
 				q0 = textbsinsert(t, q0, r, nr, TRUE, &nr);
 				textsetselect(t, t->q0, t->q1);	/* insert could leave it somewhere else */
-				if(qid!=QWwrsel && t->org <= q0 && q0 < t->org+t->fr.nchars)
+				if(qid!=QWwrsel && shouldscroll(t, q0, qid))
 					textshow(t, q0+nr, q0+nr, 1);
 				textscrdraw(t);
 			}
