Patch from jbalogh fixes issue #2282 (misnamed seekable() method).
diff --git a/Lib/io.py b/Lib/io.py
index 24bf37b..98843d3 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -1203,7 +1203,7 @@
     # were rendered by the decoder after feeding it those bytes.  We
     # use this to reconstruct intermediate decoder states in tell().
 
-    def _seekable(self):
+    def seekable(self):
         return self._seekable
 
     def flush(self):
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 4963416..0bc2b48 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -895,6 +895,12 @@
         txt.seek(pos)
         self.assertEquals(txt.read(4), "BBB\n")
 
+    def test_issue2282(self):
+        buffer = io.BytesIO(self.testdata)
+        txt = io.TextIOWrapper(buffer, encoding="ascii")
+
+        self.assertEqual(buffer.seekable(), txt.seekable())
+
     def test_newline_decoder(self):
         import codecs
         decoder = codecs.getincrementaldecoder("utf-8")()
diff --git a/Misc/ACKS b/Misc/ACKS
index 0c431c0..1ae773f 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -33,6 +33,7 @@
 Stig Bakken
 Greg Ball
 Luigi Ballabio
+Jeff Balogh
 Michael J. Barber
 Chris Barker
 Quentin Barnes
diff --git a/Misc/NEWS b/Misc/NEWS
index b654516..1665256 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -30,6 +30,8 @@
 Core and Builtins
 -----------------
 
+- Issue #2282: io.TextIOWrapper was not overriding seekable() from io.IOBase.
+
 - Issue #2115: Important speedup in setting __slot__ attributes.  Also 
   prevent a possible crash: an Abstract Base Class would try to access a slot 
   on a registered virtual subclass.