diff --git a/Lib/io.py b/Lib/io.py
index 54de504..1458b47 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -1199,6 +1199,10 @@
         self.flush()
         # First do the raw seek, then empty the read buffer, so that
         # if the raw seek fails, we don't lose buffered data forever.
+        if self._read_buf and whence == 1:
+            # Undo read ahead.
+            with self._read_lock:
+                self.raw.seek(self._read_pos - len(self._read_buf), 1)
         pos = self.raw.seek(pos, whence)
         with self._read_lock:
             self._reset_read_buf()
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index c732b1f..aebe67b 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -107,6 +107,10 @@
 
         self.assertEqual(f.truncate(12), 12)
         self.assertEqual(f.tell(), 13)
+        self.assertEqual(f.write(b"hij"), 3)
+        self.assertEqual(f.seek(0,1), 16)
+        self.assertEqual(f.tell(), 16)
+        self.assertEqual(f.truncate(12), 12)
         self.assertRaises(TypeError, f.seek, 0.0)
 
     def read_ops(self, f, buffered=False):
@@ -129,6 +133,10 @@
         self.assertEqual(f.seek(-6, 1), 5)
         self.assertEqual(f.read(5), b" worl")
         self.assertEqual(f.tell(), 10)
+        f.seek(0)
+        f.read(2)
+        f.seek(0, 1)
+        self.assertEqual(f.tell(), 2)
         self.assertRaises(TypeError, f.seek, 0.0)
         if buffered:
             f.seek(0)
@@ -182,6 +190,13 @@
         self.assertEqual(f.writable(), False)
         self.assertEqual(f.seekable(), True)
         self.read_ops(f, True)
+        f = io.open(test_support.TESTFN, "r+b")
+        self.assertEqual(f.readable(), True)
+        self.assertEqual(f.writable(), True)
+        self.assertEqual(f.seekable(), True)
+        self.write_ops(f)
+        f.seek(0)
+        self.read_ops(f, True)
         f.close()
 
     def test_readline(self):
@@ -513,7 +528,7 @@
         self.assertEquals(b"abcdefghijkl", writer._write_stack[0])
 
     def testWriteNonBlocking(self):
-        raw = MockNonBlockWriterIO((9, 2, 22, -6, 10, 12, 12))
+        raw = MockNonBlockWriterIO((9, 2, 10, -6, 10, 8, 12))
         bufio = io.BufferedWriter(raw, 8, 16)
 
         bufio.write(b"asdf")
