diff --git a/Lib/idlelib/IdleHistory.py b/Lib/idlelib/IdleHistory.py
index dc1ac8b..d6cb162 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
diff --git a/Lib/idlelib/idle_test/test_idlehistory.py b/Lib/idlelib/idle_test/test_idlehistory.py
index c48529d..b27db91 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 = ''
