diff --git a/pcl_expect.py b/pcl_expect.py
index d1f3b7c3acbfd9222382e98d8e0c02e52e71b902..8c8e90f3d9ba41bb3901601e5f42f10adb83e7ce 100644
--- a/pcl_expect.py
+++ b/pcl_expect.py
@@ -6,6 +6,7 @@ import re
 import select
 import sets
 import sys
+import telnetlib
 import types
 
 #
@@ -55,18 +56,25 @@ class expectable:
     def fileno(self):
         return self.__fileno
 
+    def _read(self):
+        try:
+            s = os.read(self.fileno(), 8192)
+        except OSError, e:
+            if e.errno == errno.EIO:
+                debug("got EIO from fd %d" % self.fileno())
+                s = ""
+            else:
+                raise
+        if s == "":
+            debug("got eof from fd %d" % self.fileno())
+            return "", True
+        else:
+            return s, False
+
     def fill_buffer(self):
         if not self.__eof_seen:
-            try:
-                s = os.read(self.fileno(), 8192)
-            except OSError, e:
-                if e.errno == errno.EIO:
-                    debug("got EIO from fd %d" % self.fileno())
-                    s = ""
-                else:
-                    raise
-            if s == "":
-                debug("got eof from fd %d" % self.fileno())
+            s, eof = self._read()
+            if eof:
                 self.__eof_seen = True
             else:
                 debug("got %d bytes from fd %d" % (len(s), self.fileno()))
@@ -143,6 +151,23 @@ class spawn(expectable):
         os.close(self.__pty)
         return os.waitpid(self.__child, 0)
 
+class telnet(expectable):
+    def __init__(self, host, port):
+        self.telnet = telnetlib.Telnet(host, port)
+
+    def _read(self):
+        try:
+            s = self.telnet.read_eager()
+        except EOFError:
+            return "", True
+        return s, False
+
+    def send(self, s):
+        self.telnet.write(s)
+
+    def fileno(self):
+        return self.telnet.fileno()
+
 class impl:
     def __init__(self, timeout = None):
         self.__first = True