diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst
index e386b36..83101bd 100644
--- a/Doc/whatsnew/2.6.rst
+++ b/Doc/whatsnew/2.6.rst
@@ -868,16 +868,19 @@
 
   .. Revision 57769
 
-
 * A new method in the :mod:`curses` module: for a window, :meth:`chgat` changes
   the display characters for a  certain number of characters on a single line.
+  (Contributed by Fabian Kreutz.)
   ::
 
      # Boldface text starting at y=0,x=21 
      # and affecting the rest of the line.
      stdscr.chgat(0,21, curses.A_BOLD)  
 
-  (Contributed by Fabian Kreutz.)
+  The :class:`Textbox` class in the :mod:`curses.textpad` module
+  now supports editing in insert mode as well as overwrite mode.
+  Insert mode is enabled by supplying a true value for the *insert_mode*
+  parameter when creating the :class:`Textbox` instance.
 
 * The :mod:`decimal` module was updated to version 1.66 of 
   `the General Decimal Specification <http://www2.hursley.ibm.com/decimal/decarith.html>`__.  New features
diff --git a/Lib/curses/textpad.py b/Lib/curses/textpad.py
index 120c572..54acc15 100644
--- a/Lib/curses/textpad.py
+++ b/Lib/curses/textpad.py
@@ -39,8 +39,9 @@
     KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P, KEY_DOWN = Ctrl-N
     KEY_BACKSPACE = Ctrl-h
     """
-    def __init__(self, win):
+    def __init__(self, win, insert_mode=False):
         self.win = win
+        self.insert_mode = insert_mode
         (self.maxy, self.maxx) = win.getmaxyx()
         self.maxy = self.maxy - 1
         self.maxx = self.maxx - 1
@@ -49,9 +50,10 @@
         win.keypad(1)
 
     def _end_of_line(self, y):
-        "Go to the location of the first blank on the given line."
+        """Go to the location of the first blank on the given line,
+        returning the index of the last non-blank character."""
         last = self.maxx
-        while 1:
+        while True:
             if ascii.ascii(self.win.inch(y, last)) != ascii.SP:
                 last = min(self.maxx, last+1)
                 break
@@ -60,19 +62,31 @@
             last = last - 1
         return last
 
+    def _insert_printable_char(self, ch):
+        (y, x) = self.win.getyx()
+        if y < self.maxy or x < self.maxx:
+            if self.insert_mode:
+                oldch = self.win.inch()
+            # The try-catch ignores the error we trigger from some curses
+            # versions by trying to write into the lowest-rightmost spot
+            # in the window.
+            try:
+                self.win.addch(ch)
+            except curses.error:
+                pass
+            if self.insert_mode:
+                (backy, backx) = self.win.getyx()
+                if ascii.isprint(oldch):
+                    self._insert_printable_char(oldch)
+                    self.win.move(backy, backx)
+
     def do_command(self, ch):
         "Process a single editing command."
         (y, x) = self.win.getyx()
         self.lastcmd = ch
         if ascii.isprint(ch):
             if y < self.maxy or x < self.maxx:
-                # The try-catch ignores the error we trigger from some curses
-                # versions by trying to write into the lowest-rightmost spot
-                # in the window.
-                try:
-                    self.win.addch(ch)
-                except curses.error:
-                    pass
+                self._insert_printable_char(ch)
         elif ch == ascii.SOH:                           # ^a
             self.win.move(y, 0)
         elif ch in (ascii.STX,curses.KEY_LEFT, ascii.BS,curses.KEY_BACKSPACE):
@@ -139,7 +153,7 @@
             if stop == 0 and self.stripspaces:
                 continue
             for x in range(self.maxx+1):
-                if self.stripspaces and x == stop:
+                if self.stripspaces and x > stop:
                     break
                 result = result + chr(ascii.ascii(self.win.inch(y, x)))
             if self.maxy > 0:
diff --git a/Misc/ACKS b/Misc/ACKS
index 5c87ed1..36b7d44 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -696,6 +696,7 @@
 Aaron Watters
 Henrik Weber
 Corran Webster
+Stefan Wehr
 Zack Weinberg
 Edward Welbourne
 Cliff Wells
diff --git a/Misc/NEWS b/Misc/NEWS
index e988fc7..fcc56b4 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -390,6 +390,10 @@
 
 - #1837: The queue module now also supports a LIFO queue and a priority queue.
 
+- Patch #1048820: Add insert-mode editing to curses.textpad.Textbox
+  (patch by Stefan Wehr).  Also, fix an off-by-one bug in 
+  Textbox.gather().
+
 - Issue #1831: ctypes now raises a TypeError if conflicting positional
   and named arguments are passed to a Structure or Union initializer.
   When too many positional arguments are passed, also a TypeError is
