diff --git a/Lib/idlelib/IdleHistory.py b/Lib/idlelib/IdleHistory.py
index dc1ac8b..931d5b2 100644
--- a/Lib/idlelib/IdleHistory.py
+++ b/Lib/idlelib/IdleHistory.py
@@ -10,7 +10,7 @@
     history_next - Bound to <<history-next>> event (default Alt-N).
     history_prev - Bound to <<history-prev>> event (default Alt-P).
     '''
-    def __init__(self, text, output_sep = "\n"):
+    def __init__(self, text):
         '''Initialize data attributes and bind event methods.
 
         .text - Idle wrapper of tk Text widget, with .bell().
@@ -23,7 +23,6 @@
         self.history = []
         self.prefix = None
         self.pointer = None
-        self.output_sep = output_sep
         self.cyclic = idleConf.GetOption("main", "History", "cyclic", 1, "bool")
         text.bind("<<history-previous>>", self.history_prev)
         text.bind("<<history-next>>", self.history_next)
@@ -38,16 +37,6 @@
         self.fetch(reverse=True)
         return "break"
 
-    def _get_source(self, start, end):
-        # Get source code from start index to end index.  Lines in the
-        # text control may be separated by sys.ps2 .
-        lines = self.text.get(start, end).split(self.output_sep)
-        return "\n".join(lines)
-
-    def _put_source(self, where, source):
-        output = self.output_sep.join(source.split("\n"))
-        self.text.insert(where, output)
-
     def fetch(self, reverse):
         '''Fetch statememt and replace current line in text widget.
 
@@ -61,10 +50,11 @@
         prefix = self.prefix
         if pointer is not None and prefix is not None:
             if self.text.compare("insert", "!=", "end-1c") or \
-               self._get_source("iomark", "end-1c") != self.history[pointer]:
+                    self.text.get("iomark", "end-1c") != self.history[pointer]:
                 pointer = prefix = None
+                self.text.mark_set("insert", "end-1c")  # != after cursor move
         if pointer is None or prefix is None:
-            prefix = self._get_source("iomark", "end-1c")
+            prefix = self.text.get("iomark", "end-1c")
             if reverse:
                 pointer = nhist  # will be decremented
             else:
@@ -75,26 +65,22 @@
                     return
         nprefix = len(prefix)
         while 1:
-            if reverse:
-                pointer = pointer - 1
-            else:
-                pointer = pointer + 1
+            pointer += -1 if reverse else 1
             if pointer < 0 or pointer >= nhist:
                 self.text.bell()
                 if not self.cyclic and pointer < 0:  # abort history_prev
                     return
                 else:
-                    if self._get_source("iomark", "end-1c") != prefix:
+                    if self.text.get("iomark", "end-1c") != prefix:
                         self.text.delete("iomark", "end-1c")
-                        self._put_source("iomark", prefix)
+                        self.text.insert("iomark", prefix)
                     pointer = prefix = None
                 break
             item = self.history[pointer]
             if item[:nprefix] == prefix and len(item) > nprefix:
                 self.text.delete("iomark", "end-1c")
-                self._put_source("iomark", item)
+                self.text.insert("iomark", item)
                 break
-        self.text.mark_set("insert", "end-1c")
         self.text.see("insert")
         self.text.tag_remove("sel", "1.0", "end")
         self.pointer = pointer
@@ -114,7 +100,7 @@
         self.prefix = None
 
 if __name__ == "__main__":
-    from test import support
+    from test import test_support as support
     support.use_resources = ['gui']
     from unittest import main
     main('idlelib.idle_test.test_idlehistory', verbosity=2, exit=False)
diff --git a/Lib/idlelib/idle_test/test_idlehistory.py b/Lib/idlelib/idle_test/test_idlehistory.py
index 56256b8..c15a926 100644
--- a/Lib/idlelib/idle_test/test_idlehistory.py
+++ b/Lib/idlelib/idle_test/test_idlehistory.py
@@ -87,6 +87,7 @@
         # The last two are diagnostic of fetch internals.
         History = self.history
         History.fetch(reverse)
+
         Equal = self.assertEqual
         Equal(self.text.get('iomark', 'end-1c'), line)
         Equal(self.text._bell, bell)
@@ -94,6 +95,7 @@
             self.text._bell = False
         Equal(History.prefix, prefix)
         Equal(History.pointer, index)
+        Equal(self.text.compare("insert", '==', "end-1c"), 1)
 
     def test_fetch_prev_cyclic(self):
         prefix = ''
