diff --git a/examples/rfc2217_server.py b/examples/rfc2217_server.py
index 53f11b4..10c47c5 100755
--- a/examples/rfc2217_server.py
+++ b/examples/rfc2217_server.py
@@ -8,7 +8,6 @@
 # SPDX-License-Identifier:    BSD-3-Clause
 
 import logging
-import os
 import socket
 import sys
 import time
@@ -16,6 +15,7 @@
 import serial
 import serial.rfc2217
 
+
 class Redirector(object):
     def __init__(self, serial_instance, socket, debug=False):
         self.serial = serial_instance
@@ -24,7 +24,7 @@
         self.rfc2217 = serial.rfc2217.PortManager(
                 self.serial,
                 self,
-                logger = logging.getLogger('rfc2217.server') if debug else None
+                logger=logging.getLogger('rfc2217.server') if debug else None
                 )
         self.log = logging.getLogger('redirector')
 
@@ -40,12 +40,12 @@
            from one side to the other"""
         self.alive = True
         self.thread_read = threading.Thread(target=self.reader)
-        self.thread_read.setDaemon(True)
-        self.thread_read.setName('serial->socket')
+        self.thread_read.daemon = True
+        self.thread_read.name = 'serial->socket'
         self.thread_read.start()
         self.thread_poll = threading.Thread(target=self.statusline_poller)
-        self.thread_poll.setDaemon(True)
-        self.thread_poll.setName('status line poll')
+        self.thread_poll.daemon = True
+        self.thread_poll.name = 'status line poll'
         self.thread_poll.start()
         self.writer()
 
@@ -54,15 +54,10 @@
         self.log.debug('reader thread started')
         while self.alive:
             try:
-                data = self.serial.read(1)              # read one, blocking
-                n = self.serial.inWaiting()             # look if there is more
-                if n:
-                    data = data + self.serial.read(n)   # and get as much as possible
+                data = self.serial.read(self.serial.in_waiting or 1)
                 if data:
                     # escape outgoing data when needed (Telnet IAC (0xff) character)
-                    data = serial.to_bytes(self.rfc2217.escape(data))
-                    with self._write_lock:
-                        self.socket.sendall(data)       # send it over TCP
+                    self.write(serial.to_bytes(self.rfc2217.escape(data)))
             except socket.error as msg:
                 self.log.error('%s' % (msg,))
                 # probably got disconnected
@@ -102,8 +97,8 @@
     import argparse
 
     parser = argparse.ArgumentParser(
-        description = "RFC 2217 Serial to Network (TCP/IP) redirector.",
-        epilog = """\
+        description="RFC 2217 Serial to Network (TCP/IP) redirector.",
+        epilog="""\
 NOTE: no security measures are implemented. Anyone can remotely connect
 to this service over the network.
 
@@ -113,14 +108,16 @@
 
     parser.add_argument('SERIALPORT')
 
-    parser.add_argument('-p', '--localport',
+    parser.add_argument(
+            '-p', '--localport',
             type=int,
             help='local TCP port, default: %(default)s',
             metavar='TCPPORT',
             default=2217
             )
 
-    parser.add_argument('-v', '--verbose',
+    parser.add_argument(
+            '-v', '--verbose',
             dest='verbosity',
             action='count',
             help='print more diagnostic messages (option can be given multiple times)',
@@ -138,43 +135,43 @@
             logging.NOTSET,
             )[args.verbosity]
     logging.basicConfig(level=logging.INFO)
-    logging.getLogger('root').setLevel(logging.INFO)
+    #~ logging.getLogger('root').setLevel(logging.INFO)
     logging.getLogger('rfc2217').setLevel(level)
 
     # connect to serial port
     ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True)
-    ser.timeout  = 3     # required so that the reader thread can exit
+    ser.timeout = 3     # required so that the reader thread can exit
+    # reset control line as no _remote_ "terminal" has been connected yet
+    ser.dtr = False
+    ser.rts = False
 
     logging.info("RFC 2217 TCP/IP to Serial redirector - type Ctrl-C / BREAK to quit")
 
     try:
         ser.open()
     except serial.SerialException as e:
-        logging.error("Could not open serial port %s: %s" % (ser.name, e))
+        logging.error("Could not open serial port {}: {}".format(ser.name, e))
         sys.exit(1)
 
-    logging.info("Serving serial port: %s" % (ser.name,))
-    settings = ser.getSettingsDict()
-    # reset control line as no _remote_ "terminal" has been connected yet
-    ser.setDTR(False)
-    ser.setRTS(False)
+    logging.info("Serving serial port: {}".format(ser.name))
+    settings = ser.get_settings()
 
     srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     srv.bind(('', args.localport))
     srv.listen(1)
-    logging.info("TCP/IP port: %s" % (args.localport,))
+    logging.info("TCP/IP port: {}".format(args.localport))
     while True:
         try:
-            connection, addr = srv.accept()
-            logging.info('Connected by %s:%s' % (addr[0], addr[1]))
-            connection.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
-            ser.setRTS(True)
-            ser.setDTR(True)
+            client_socket, addr = srv.accept()
+            logging.info('Connected by {}:{}'.format(addr[0], addr[1]))
+            client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+            ser.rts = True
+            ser.dtr = True
             # enter network <-> serial loop
             r = Redirector(
                     ser,
-                    connection,
+                    client_socket,
                     args.verbosity > 0
                     )
             try:
@@ -182,15 +179,16 @@
             finally:
                 logging.info('Disconnected')
                 r.stop()
-                connection.close()
-                ser.setDTR(False)
-                ser.setRTS(False)
+                client_socket.close()
+                ser.dtr = False
+                ser.rts = False
                 # Restore port settings (may have been changed by RFC 2217
                 # capable client)
-                ser.applySettingsDict(settings)
+                ser.apply_settings(settings)
         except KeyboardInterrupt:
+            sys.stdout.write('\n')
             break
         except socket.error as msg:
-            logging.error('%s' % (msg,))
+            logging.error(str(msg))
 
     logging.info('--- exit ---')
