diff --git a/documentation/examples.rst b/documentation/examples.rst
index 5c51ef6..1114a18 100644
--- a/documentation/examples.rst
+++ b/documentation/examples.rst
@@ -4,107 +4,11 @@
  Examples
 ==========
 
-.. _miniterm:
 
 Miniterm
 ========
-This is a console application that provides a small terminal application.
-Miniterm itself does not implement any terminal features such as VT102
-compatibility. However it may inherit these features from the terminal it is run.
-For example on GNU/Linux running from an xterm it will support the escape
-sequences of the xterm. On Windows the typical console window is dumb and does
-not support any escapes. When ANSI.sys is loaded it supports some escapes.
-
-Miniterm::
-
-    --- Miniterm on /dev/ttyS0: 9600,8,N,1 ---
-    --- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
-
-Command line options can be given so that binary data including escapes for
-terminals are escaped or output as hex.
-
-Miniterm supports :rfc:`2217` remote serial ports and raw sockets using :ref:`URLs`
-such as ``rfc2217:://<host>:<port>`` respectively ``socket://<host>:<port>`` as
-*port* argument when invoking.
-
-Command line options ``python -m serial.tools.miniterm -h``::
-
-    usage: miniterm.py [-h] [--parity {N,E,O,S,M}] [--rtscts] [--xonxoff]
-                       [--rts RTS] [--dtr DTR] [-e] [--encoding CODEC] [-f NAME]
-                       [--eol {CR,LF,CRLF}] [--raw] [--exit-char NUM]
-                       [--menu-char NUM] [-q] [--develop]
-                       [port] [baudrate]
-
-    Miniterm - A simple terminal program for the serial port.
-
-    positional arguments:
-      port                  serial port name
-      baudrate              set baud rate, default: 9600
-
-    optional arguments:
-      -h, --help            show this help message and exit
-
-    port settings:
-      --parity {N,E,O,S,M}  set parity, one of {N E O S M}, default: N
-      --rtscts              enable RTS/CTS flow control (default off)
-      --xonxoff             enable software flow control (default off)
-      --rts RTS             set initial RTS line state (possible values: 0, 1)
-      --dtr DTR             set initial DTR line state (possible values: 0, 1)
-
-    data handling:
-      -e, --echo            enable local echo (default off)
-      --encoding CODEC      set the encoding for the serial port (e.g. hexlify,
-                            Latin1, UTF-8), default: UTF-8
-      -f NAME, --filter NAME
-                            add text transformation
-      --eol {CR,LF,CRLF}    end of line mode
-      --raw                 Do no apply any encodings/transformations
-
-    hotkeys:
-      --exit-char NUM       Unicode of special character that is used to exit the
-                            application, default: 29
-      --menu-char NUM       Unicode code of special character that is used to
-                            control miniterm (menu), default: 20
-
-    diagnostics:
-      -q, --quiet           suppress non-error messages
-      --develop             show Python traceback on error
-
-
-Miniterm supports some control functions. Typing :kbd:`Ctrl+T Ctrl+H` when it is
-running shows the help text::
-
-    --- pySerial (3.0a) - miniterm - help
-    ---
-    --- Ctrl+]   Exit program
-    --- Ctrl+T   Menu escape key, followed by:
-    --- Menu keys:
-    ---    Ctrl+T  Send the menu character itself to remote
-    ---    Ctrl+]  Send the exit character itself to remote
-    ---    Ctrl+I  Show info
-    ---    Ctrl+U  Upload file (prompt will be shown)
-    ---    Ctrl+A  encoding
-    ---    Ctrl+F  edit filters
-    --- Toggles:
-    ---    Ctrl+R  RTS   Ctrl+D  DTR   Ctrl+B  BREAK
-    ---    Ctrl+E  echo  Ctrl+L  EOL
-    ---
-    --- Port settings (Ctrl+T followed by the following):
-    ---    p          change port
-    ---    7 8        set data bits
-    ---    N E O S M  change parity (None, Even, Odd, Space, Mark)
-    ---    1 2 3      set stop bits (1, 2, 1.5)
-    ---    b          change baud rate
-    ---    x X        disable/enable software flow control
-    ---    r R        disable/enable hardware flow control
-
-.. versionchanged:: 2.5
-    Added :kbd:`Ctrl+T` menu and added support for opening URLs.
-.. versionchanged:: 2.6
-    File moved from the examples to :mod:`serial.tools.miniterm`.
-.. versionchanged:: 3.0
-    Apply encoding on serial port, convert to Unicode for console.
-    Added new filters, default to stripping terminal control sequences.
+Miniterm is now available as module instead of example.
+see :ref:`miniterm` for details.
 
 miniterm.py_
     The miniterm program.
diff --git a/documentation/index.rst b/documentation/index.rst
index 9a258fe..e1699f5 100644
--- a/documentation/index.rst
+++ b/documentation/index.rst
@@ -25,8 +25,10 @@
 
     pyserial
     shortintro
-    examples
     pyserial_api
+    tools
+    url_handlers
+    examples
     appendix
 
 Indices and tables
diff --git a/documentation/pyserial_api.rst b/documentation/pyserial_api.rst
index 85dd53a..005eeda 100644
--- a/documentation/pyserial_api.rst
+++ b/documentation/pyserial_api.rst
@@ -47,10 +47,10 @@
         :param bool dsrdtr:
             Enable hardware (DSR/DTR) flow control.
 
-        :param float write_timeout
+        :param float write_timeout:
             Set a write timeout value.
 
-        :param float inter_byte_timeout
+        :param float inter_byte_timeout:
             Inter-character timeout, :const:`None` to disable (default).
 
         :exception ValueError:
@@ -890,17 +890,6 @@
 
 .. function:: device(number)
 
-    :param number: Port number.
-    :return: String containing device name.
-    :deprecated: Use device names directly.
-
-    Convert a port number to a platform dependent device name. Unfortunately
-    this does not work well for all platforms; e.g. some may miss USB-Serial
-    converters and enumerate only internal serial ports.
-
-    The conversion may be made off-line, that is, there is no guarantee that
-    the returned device name really exists on the system.
-
     .. versionchanged:: 3.0 removed, use ``serial.tools.list_ports`` instead
 
 
@@ -913,7 +902,7 @@
     Get a native or a :rfc:`2217` implementation of the Serial class, depending
     on port/url. This factory function is useful when an application wants
     to support both, local ports and remote ports. There is also support
-    for other types, see :ref:`URL <URLs>` section below.
+    for other types, see :ref:`URL <URLs>` section.
 
     The port is not opened when a keyword parameter called *do_not_open* is
     given and true, by default it is opened.
@@ -967,190 +956,15 @@
     .. versionadded:: 3.0
 
 
-.. _URLs:
-
-URLs
-----
-The function :func:`serial_for_url` accepts the following types of URLs:
-
-- ``rfc2217://<host>:<port>[?<option>[&<option>...]]``
-- ``socket://<host>:<port>[?logging={debug|info|warning|error}]``
-- ``loop://[?logging={debug|info|warning|error}]``
-- ``hwgrep://<regexp>``
-- ``spy://port[?option[=value][&option[=value]]]``
-
-.. versionchanged:: 3.0 Options are specified with ``?`` and ``&`` instead of ``/``
-
-Device names are also supported, e.g.:
-
-- ``/dev/ttyUSB0`` (Linux)
-- ``COM3`` (Windows)
-
-Future releases of pySerial might add more types. Since pySerial 2.6 it is also
-possible for the user to add protocol handlers using
-:attr:`protocol_handler_packages`.
-
-``rfc2217://``
-    Used to connect to :rfc:`2217` compatible servers. All serial port
-    functions are supported. Implemented by :class:`rfc2217.Serial`.
-
-    Supported options in the URL are:
-
-    - ``ign_set_control`` does not wait for acknowledges to SET_CONTROL. This
-      option can be used for non compliant servers (i.e. when getting an
-      ``remote rejected value for option 'control'`` error when connecting).
-
-    - ``poll_modem``: The client issues NOTIFY_MODEMSTATE requests when status
-      lines are read (CTS/DTR/RI/CD). Without this option it relies on the server
-      sending the notifications automatically (that's what the RFC suggests and
-      most servers do). Enable this option when :attr:`cts` does not work as
-      expected, i.e. for servers that do not send notifications.
-
-    - ``timeout=<value>``: Change network timeout (default 3 seconds). This is
-      useful when the server takes a little more time to send its answers. The
-      timeout applies to the initial Telnet / :rfc:`2271` negotiation as well
-      as changing port settings or control line change commands.
-
-    - ``logging={debug|info|warning|error}``: Prints diagnostic messages (not
-      useful for end users). It uses the logging module and a logger called
-      ``pySerial.rfc2217`` so that the application can setup up logging
-      handlers etc. It will call :meth:`logging.basicConfig` which initializes
-      for output on ``sys.stderr`` (if no logging was set up already).
-
-``socket://``
-    The purpose of this connection type is that applications using pySerial can
-    connect to TCP/IP to serial port converters that do not support :rfc:`2217`.
-
-    Uses a TCP/IP socket. All serial port settings, control and status lines
-    are ignored. Only data is transmitted and received.
-
-    Supported options in the URL are:
-
-    - ``logging={debug|info|warning|error}``: Prints diagnostic messages (not
-      useful for end users). It uses the logging module and a logger called
-      ``pySerial.socket`` so that the application can setup up logging handlers
-      etc. It will call :meth:`logging.basicConfig` which initializes for
-      output on ``sys.stderr`` (if no logging was set up already).
-
-``loop://``
-    The least useful type. It simulates a loop back connection
-    (``RX<->TX``  ``RTS<->CTS``  ``DTR<->DSR``). It could be used to test
-    applications or run the unit tests.
-
-    Supported options in the URL are:
-
-    - ``logging={debug|info|warning|error}``: Prints diagnostic messages (not
-      useful for end users). It uses the logging module and a logger called
-      ``pySerial.loop`` so that the application can setup up logging handlers
-      etc. It will call :meth:`logging.basicConfig` which initializes for
-      output on ``sys.stderr`` (if no logging was set up already).
-
-``hwgrep://``
-    This type uses :mod:`serial.tools.list_ports` to obtain a list of ports and
-    searches the list for matches by a regexp (see :py:mod:`re`) that follows
-    the slashes.
-
-    Depending on the capabilities of the list_ports module on the system, it is
-    possible to search for the description or hardware ID of a device, e.g. USB
-    VID:PID or texts.
-
-    Unfortunately, on some systems list_ports only lists a subset of the port
-    names with no additional information. Currently, on Windows and Linux and
-    OSX it should find additional information.
-
-``spy://``
-    Wrapping the native serial port, this protocol makes it possible to
-    intercept the data received and transmitted as well as the access to the
-    control lines, break and flush commands.
-
-    Supported options in the URL are:
-
-    - ``file=FILENAME`` output to given file or device instead of stderr
-    - ``color`` enable ANSI escape sequences to colorize output
-    - ``raw`` output the read and written data directly (default is to create a
-      hex dump). In this mode, no control line and other commands are logged.
-    - ``all`` also show ``in_waiting`` and empty ``read()`` calls (hidden by
-      default because of high traffic).
-
-    Example::
-
-        import serial
-
-        with serial.serial_for_url('spy:///dev/ttyUSB0?file=test.txt', timeout=1) as s:
-            s.dtr = False
-            s.write('hello world')
-            s.read(20)
-            s.dtr = True
-            s.write(serial.to_bytes(range(256)))
-            s.read(400)
-            s.send_break()
-
-        with open('test.txt') as f:
-            print(f.read())
-
-    Outputs::
-
-        000000.002 Q-RX reset_input_buffer
-        000000.002 DTR  inactive
-        000000.002 TX   0000  68 65 6C 6C 6F 20 77 6F  72 6C 64                 hello world     
-        000001.015 RX   0000  68 65 6C 6C 6F 20 77 6F  72 6C 64                 hello world     
-        000001.015 DTR  active
-        000001.015 TX   0000  00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  ................
-        000001.015 TX   0010  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F  ................
-        000001.015 TX   0020  20 21 22 23 24 25 26 27  28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
-        000001.015 TX   0030  30 31 32 33 34 35 36 37  38 39 3A 3B 3C 3D 3E 3F  0123456789:;<=>?
-        000001.015 TX   0040  40 41 42 43 44 45 46 47  48 49 4A 4B 4C 4D 4E 4F  @ABCDEFGHIJKLMNO
-        000001.016 TX   0050  50 51 52 53 54 55 56 57  58 59 5A 5B 5C 5D 5E 5F  PQRSTUVWXYZ[\]^_
-        000001.016 TX   0060  60 61 62 63 64 65 66 67  68 69 6A 6B 6C 6D 6E 6F  `abcdefghijklmno
-        000001.016 TX   0070  70 71 72 73 74 75 76 77  78 79 7A 7B 7C 7D 7E 7F  pqrstuvwxyz{|}~.
-        000001.016 TX   0080  80 81 82 83 84 85 86 87  88 89 8A 8B 8C 8D 8E 8F  ................
-        000001.016 TX   0090  90 91 92 93 94 95 96 97  98 99 9A 9B 9C 9D 9E 9F  ................
-        000001.016 TX   00A0  A0 A1 A2 A3 A4 A5 A6 A7  A8 A9 AA AB AC AD AE AF  ................
-        000001.016 TX   00B0  B0 B1 B2 B3 B4 B5 B6 B7  B8 B9 BA BB BC BD BE BF  ................
-        000001.016 TX   00C0  C0 C1 C2 C3 C4 C5 C6 C7  C8 C9 CA CB CC CD CE CF  ................
-        000001.016 TX   00D0  D0 D1 D2 D3 D4 D5 D6 D7  D8 D9 DA DB DC DD DE DF  ................
-        000001.016 TX   00E0  E0 E1 E2 E3 E4 E5 E6 E7  E8 E9 EA EB EC ED EE EF  ................
-        000001.016 TX   00F0  F0 F1 F2 F3 F4 F5 F6 F7  F8 F9 FA FB FC FD FE FF  ................
-        000002.284 RX   0000  00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  ................
-        000002.284 RX   0010  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F  ................
-        000002.284 RX   0020  20 21 22 23 24 25 26 27  28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
-        000002.284 RX   0030  30 31 32 33 34 35 36 37  38 39 3A 3B 3C 3D 3E 3F  0123456789:;<=>?
-        000002.284 RX   0040  40 41 42 43 44 45 46 47  48 49 4A 4B 4C 4D 4E 4F  @ABCDEFGHIJKLMNO
-        000002.284 RX   0050  50 51 52 53 54 55 56 57  58 59 5A 5B 5C 5D 5E 5F  PQRSTUVWXYZ[\]^_
-        000002.284 RX   0060  60 61 62 63 64 65 66 67  68 69 6A 6B 6C 6D 6E 6F  `abcdefghijklmno
-        000002.284 RX   0070  70 71 72 73 74 75 76 77  78 79 7A 7B 7C 7D 7E 7F  pqrstuvwxyz{|}~.
-        000002.284 RX   0080  80 81 82 83 84 85 86 87  88 89 8A 8B 8C 8D 8E 8F  ................
-        000002.284 RX   0090  90 91 92 93 94 95 96 97  98 99 9A 9B 9C 9D 9E 9F  ................
-        000002.284 RX   00A0  A0 A1 A2 A3 A4 A5 A6 A7  A8 A9 AA AB AC AD AE AF  ................
-        000002.284 RX   00B0  B0 B1 B2 B3 B4 B5 B6 B7  B8 B9 BA BB BC BD BE BF  ................
-        000002.284 RX   00C0  C0 C1 C2 C3 C4 C5 C6 C7  C8 C9 CA CB CC CD CE CF  ................
-        000002.284 RX   00D0  D0 D1 D2 D3 D4 D5 D6 D7  D8 D9 DA DB DC DD DE DF  ................
-        000002.284 RX   00E0  E0 E1 E2 E3 E4 E5 E6 E7  E8 E9 EA EB EC ED EE EF  ................
-        000002.284 RX   00F0  F0 F1 F2 F3 F4 F5 F6 F7  F8 F9 FA FB FC FD FE FF  ................
-        000002.284 BRK  send_break 0.25
-
-    .. versionadded:: 3.0
-
-
-
-Examples:
-
-- ``rfc2217://localhost:7000``
-- ``rfc2217://localhost:7000?poll_modem``
-- ``rfc2217://localhost:7000?ign_set_control&timeout=5.5``
-- ``socket://localhost:7777``
-- ``loop://?logging=debug``
-- ``hwgrep://0451:f432`` (USB VID:PID)
-- ``spy://COM54?file=log.txt``
-
-
 asyncio
 =======
 
+.. module:: serial.aio
+
 .. warning:: This implementation is currently in an experimental state. Use
     at your own risk.
 
-Experimental asyncio support is available for Python 3.4 and newer. The
+Experimental asyncio support is available for Python 3.4 and newer. The module
 :mod:`serial.aio` provides a :class:`asyncio.Transport`:
 ``SerialTransport``.
 
@@ -1173,7 +987,7 @@
         def connection_made(self, transport):
             self.transport = transport
             print('port opened', transport)
-            transport.serial.setRTS(0)
+            transport.serial.rts = False
             transport.write(b'hello world\n')
 
         def data_received(self, data):
@@ -1185,93 +999,8 @@
             asyncio.get_event_loop().stop()
 
     loop = asyncio.get_event_loop()
-    coro = create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200)
+    coro = serial.aio.create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200)
     loop.run_until_complete(coro)
     loop.run_forever()
     loop.close()
 
-
-Tools
-=====
-
-serial.tools.list_ports
------------------------
-.. module:: serial.tools.list_ports
-.. versionadded:: 2.6
-
-This module can be executed to get a list of ports (``python -m
-serial.tools.list_ports``). It also contains the following functions.
-
-
-.. function:: comports()
-
-    :return: an iterable.
-
-    The function returns an iterable that yields tuples of three strings:
-
-    - port name as it can be passed to :class:`serial.Serial` or
-      :func:`serial.serial_for_url`
-    - description in human readable form
-    - sort of hardware ID. E.g. may contain VID:PID of USB-serial adapters.
-
-    Items are returned in no particular order. It may make sense to sort the
-    items. Also note that the reported strings are different across platforms
-    and operating systems, even for the same device.
-
-    .. note:: Support is limited to a number of operating systems. On some
-              systems description and hardware ID will not be available
-              (``None``).
-
-    :platform: Posix (/dev files)
-    :platform: Linux (/dev files, sysfs and lsusb)
-    :platform: OSX (iokit)
-    :platform: Windows (setupapi, registry)
-
-
-.. function:: grep(regexp)
-
-    :param regexp: regular expression (see stdlib :mod:`re`)
-    :return: filtered sequence, see :func:`comports`.
-
-    Search for ports using a regular expression. Port name, description and
-    hardware ID are searched (case insensitive). The function returns an
-    iterable that contains the same tuples that :func:`comport` generates but
-    only those that match the regexp.
-
-
-Command line usage
-
-Help for ``python -m serial.tools.list_ports``::
-
-    usage: list_ports.py [-h] [-v] [-q] [-n N] [regexp]
-
-    Serial port enumeration
-
-    positional arguments:
-      regexp         only show ports that match this regex
-
-    optional arguments:
-      -h, --help     show this help message and exit
-      -v, --verbose  show more messages
-      -q, --quiet    suppress all messages
-      -n N           only output the N-th entry
-
-Examples:
-
-- List all ports with details::
-
-    python -m serial.tools.list_ports -v
-
-- List the 2nd port matching a USB VID:PID pattern::
-
-    python -m serial.tools.list_ports 1234:5678 -q -n 2
-
-
-serial.tools.miniterm
----------------------
-.. module:: serial.tools.miniterm
-.. versionadded:: 2.6
-
-Miniterm is now available as module instead of example.
-see :ref:`miniterm` for details.
-
diff --git a/documentation/tools.rst b/documentation/tools.rst
new file mode 100644
index 0000000..962c98b
--- /dev/null
+++ b/documentation/tools.rst
@@ -0,0 +1,184 @@
+=======
+ Tools
+=======
+
+.. module:: serial
+
+serial.tools.list_ports
+=======================
+.. module:: serial.tools.list_ports
+
+This module can be executed to get a list of ports (``python -m
+serial.tools.list_ports``). It also contains the following functions.
+
+
+.. function:: comports()
+
+    :return: an iterable.
+
+    The function returns an iterable that yields tuples of three strings:
+
+    - port name as it can be passed to :class:`serial.Serial` or
+      :func:`serial.serial_for_url`
+    - description in human readable form
+    - sort of hardware ID. E.g. may contain VID:PID of USB-serial adapters.
+
+    Items are returned in no particular order. It may make sense to sort the
+    items. Also note that the reported strings are different across platforms
+    and operating systems, even for the same device.
+
+    .. note:: Support is limited to a number of operating systems. On some
+              systems description and hardware ID will not be available
+              (``None``).
+
+    :platform: Posix (/dev files)
+    :platform: Linux (/dev files, sysfs and lsusb)
+    :platform: OSX (iokit)
+    :platform: Windows (setupapi, registry)
+
+
+.. function:: grep(regexp)
+
+    :param regexp: regular expression (see stdlib :mod:`re`)
+    :return: filtered sequence, see :func:`comports`.
+
+    Search for ports using a regular expression. Port name, description and
+    hardware ID are searched (case insensitive). The function returns an
+    iterable that contains the same tuples that :func:`comport` generates but
+    only those that match the regexp.
+
+
+Command line usage
+
+Help for ``python -m serial.tools.list_ports``::
+
+    usage: list_ports.py [-h] [-v] [-q] [-n N] [regexp]
+
+    Serial port enumeration
+
+    positional arguments:
+      regexp         only show ports that match this regex
+
+    optional arguments:
+      -h, --help     show this help message and exit
+      -v, --verbose  show more messages
+      -q, --quiet    suppress all messages
+      -n N           only output the N-th entry
+
+Examples:
+
+- List all ports with details::
+
+    python -m serial.tools.list_ports -v
+
+- List the 2nd port matching a USB VID:PID pattern::
+
+    python -m serial.tools.list_ports 1234:5678 -q -n 2
+
+.. versionadded:: 2.6
+
+
+.. _miniterm:
+
+serial.tools.miniterm
+=====================
+.. module:: serial.tools.miniterm
+
+This is a console application that provides a small terminal application.
+Miniterm itself does not implement any terminal features such as VT102
+compatibility. However it may inherit these features from the terminal it is run.
+For example on GNU/Linux running from an xterm it will support the escape
+sequences of the xterm. On Windows the typical console window is dumb and does
+not support any escapes. When ANSI.sys is loaded it supports some escapes.
+
+Miniterm::
+
+    --- Miniterm on /dev/ttyS0: 9600,8,N,1 ---
+    --- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
+
+Command line options can be given so that binary data including escapes for
+terminals are escaped or output as hex.
+
+Miniterm supports :rfc:`2217` remote serial ports and raw sockets using :ref:`URLs`
+such as ``rfc2217:://<host>:<port>`` respectively ``socket://<host>:<port>`` as
+*port* argument when invoking.
+
+Command line options ``python -m serial.tools.miniterm -h``::
+
+    usage: miniterm.py [-h] [--parity {N,E,O,S,M}] [--rtscts] [--xonxoff]
+                       [--rts RTS] [--dtr DTR] [-e] [--encoding CODEC] [-f NAME]
+                       [--eol {CR,LF,CRLF}] [--raw] [--exit-char NUM]
+                       [--menu-char NUM] [-q] [--develop]
+                       [port] [baudrate]
+
+    Miniterm - A simple terminal program for the serial port.
+
+    positional arguments:
+      port                  serial port name
+      baudrate              set baud rate, default: 9600
+
+    optional arguments:
+      -h, --help            show this help message and exit
+
+    port settings:
+      --parity {N,E,O,S,M}  set parity, one of {N E O S M}, default: N
+      --rtscts              enable RTS/CTS flow control (default off)
+      --xonxoff             enable software flow control (default off)
+      --rts RTS             set initial RTS line state (possible values: 0, 1)
+      --dtr DTR             set initial DTR line state (possible values: 0, 1)
+
+    data handling:
+      -e, --echo            enable local echo (default off)
+      --encoding CODEC      set the encoding for the serial port (e.g. hexlify,
+                            Latin1, UTF-8), default: UTF-8
+      -f NAME, --filter NAME
+                            add text transformation
+      --eol {CR,LF,CRLF}    end of line mode
+      --raw                 Do no apply any encodings/transformations
+
+    hotkeys:
+      --exit-char NUM       Unicode of special character that is used to exit the
+                            application, default: 29
+      --menu-char NUM       Unicode code of special character that is used to
+                            control miniterm (menu), default: 20
+
+    diagnostics:
+      -q, --quiet           suppress non-error messages
+      --develop             show Python traceback on error
+
+
+Miniterm supports some control functions. Typing :kbd:`Ctrl+T Ctrl+H` when it is
+running shows the help text::
+
+    --- pySerial (3.0a) - miniterm - help
+    ---
+    --- Ctrl+]   Exit program
+    --- Ctrl+T   Menu escape key, followed by:
+    --- Menu keys:
+    ---    Ctrl+T  Send the menu character itself to remote
+    ---    Ctrl+]  Send the exit character itself to remote
+    ---    Ctrl+I  Show info
+    ---    Ctrl+U  Upload file (prompt will be shown)
+    ---    Ctrl+A  encoding
+    ---    Ctrl+F  edit filters
+    --- Toggles:
+    ---    Ctrl+R  RTS   Ctrl+D  DTR   Ctrl+B  BREAK
+    ---    Ctrl+E  echo  Ctrl+L  EOL
+    ---
+    --- Port settings (Ctrl+T followed by the following):
+    ---    p          change port
+    ---    7 8        set data bits
+    ---    N E O S M  change parity (None, Even, Odd, Space, Mark)
+    ---    1 2 3      set stop bits (1, 2, 1.5)
+    ---    b          change baud rate
+    ---    x X        disable/enable software flow control
+    ---    r R        disable/enable hardware flow control
+
+.. versionchanged:: 2.5
+    Added :kbd:`Ctrl+T` menu and added support for opening URLs.
+.. versionchanged:: 2.6
+    File moved from the examples to :mod:`serial.tools.miniterm`.
+.. versionchanged:: 3.0
+    Apply encoding on serial port, convert to Unicode for console.
+    Added new filters, default to stripping terminal control sequences.
+
diff --git a/documentation/url_handlers.rst b/documentation/url_handlers.rst
new file mode 100644
index 0000000..9814f24
--- /dev/null
+++ b/documentation/url_handlers.rst
@@ -0,0 +1,200 @@
+==============
+ URL Handlers
+==============
+
+.. module:: serial
+
+.. _URLs:
+
+Overview
+========
+The function :func:`serial_for_url` accepts the following types of URLs:
+
+- ``rfc2217://<host>:<port>[?<option>[&<option>...]]``
+- ``socket://<host>:<port>[?logging={debug|info|warning|error}]``
+- ``loop://[?logging={debug|info|warning|error}]``
+- ``hwgrep://<regexp>``
+- ``spy://port[?option[=value][&option[=value]]]``
+
+.. versionchanged:: 3.0 Options are specified with ``?`` and ``&`` instead of ``/``
+
+Device names are also supported, e.g.:
+
+- ``/dev/ttyUSB0`` (Linux)
+- ``COM3`` (Windows)
+
+Future releases of pySerial might add more types. Since pySerial 2.6 it is also
+possible for the user to add protocol handlers using
+:attr:`protocol_handler_packages`.
+
+
+``rfc2217://``
+==============
+Used to connect to :rfc:`2217` compatible servers. All serial port
+functions are supported. Implemented by :class:`rfc2217.Serial`.
+
+Supported options in the URL are:
+
+- ``ign_set_control`` does not wait for acknowledges to SET_CONTROL. This
+  option can be used for non compliant servers (i.e. when getting an
+  ``remote rejected value for option 'control'`` error when connecting).
+
+- ``poll_modem``: The client issues NOTIFY_MODEMSTATE requests when status
+  lines are read (CTS/DTR/RI/CD). Without this option it relies on the server
+  sending the notifications automatically (that's what the RFC suggests and
+  most servers do). Enable this option when :attr:`cts` does not work as
+  expected, i.e. for servers that do not send notifications.
+
+- ``timeout=<value>``: Change network timeout (default 3 seconds). This is
+  useful when the server takes a little more time to send its answers. The
+  timeout applies to the initial Telnet / :rfc:`2271` negotiation as well
+  as changing port settings or control line change commands.
+
+- ``logging={debug|info|warning|error}``: Prints diagnostic messages (not
+  useful for end users). It uses the logging module and a logger called
+  ``pySerial.rfc2217`` so that the application can setup up logging
+  handlers etc. It will call :meth:`logging.basicConfig` which initializes
+  for output on ``sys.stderr`` (if no logging was set up already).
+
+.. warning:: The connection is not encrypted and no authentication is
+             supported! Only use it in trusted environments.
+
+
+``socket://``
+=============
+The purpose of this connection type is that applications using pySerial can
+connect to TCP/IP to serial port converters that do not support :rfc:`2217`.
+
+Uses a TCP/IP socket. All serial port settings, control and status lines
+are ignored. Only data is transmitted and received.
+
+Supported options in the URL are:
+
+- ``logging={debug|info|warning|error}``: Prints diagnostic messages (not
+  useful for end users). It uses the logging module and a logger called
+  ``pySerial.socket`` so that the application can setup up logging handlers
+  etc. It will call :meth:`logging.basicConfig` which initializes for
+  output on ``sys.stderr`` (if no logging was set up already).
+
+.. warning:: The connection is not encrypted and no authentication is
+             supported! Only use it in trusted environments.
+
+
+``loop://``
+===========
+The least useful type. It simulates a loop back connection
+(``RX<->TX``  ``RTS<->CTS``  ``DTR<->DSR``). It could be used to test
+applications or run the unit tests.
+
+Supported options in the URL are:
+
+- ``logging={debug|info|warning|error}``: Prints diagnostic messages (not
+  useful for end users). It uses the logging module and a logger called
+  ``pySerial.loop`` so that the application can setup up logging handlers
+  etc. It will call :meth:`logging.basicConfig` which initializes for
+  output on ``sys.stderr`` (if no logging was set up already).
+
+
+``hwgrep://``
+=============
+This type uses :mod:`serial.tools.list_ports` to obtain a list of ports and
+searches the list for matches by a regexp (see :py:mod:`re`) that follows
+the slashes.
+
+Depending on the capabilities of the list_ports module on the system, it is
+possible to search for the description or hardware ID of a device, e.g. USB
+VID:PID or texts.
+
+Unfortunately, on some systems list_ports only lists a subset of the port
+names with no additional information. Currently, on Windows and Linux and
+OSX it should find additional information.
+
+
+``spy://``
+==========
+Wrapping the native serial port, this protocol makes it possible to
+intercept the data received and transmitted as well as the access to the
+control lines, break and flush commands. It is mainly used to debug
+applications.
+
+Supported options in the URL are:
+
+- ``file=FILENAME`` output to given file or device instead of stderr
+- ``color`` enable ANSI escape sequences to colorize output
+- ``raw`` output the read and written data directly (default is to create a
+  hex dump). In this mode, no control line and other commands are logged.
+- ``all`` also show ``in_waiting`` and empty ``read()`` calls (hidden by
+  default because of high traffic).
+
+Example::
+
+    import serial
+
+    with serial.serial_for_url('spy:///dev/ttyUSB0?file=test.txt', timeout=1) as s:
+        s.dtr = False
+        s.write('hello world')
+        s.read(20)
+        s.dtr = True
+        s.write(serial.to_bytes(range(256)))
+        s.read(400)
+        s.send_break()
+
+    with open('test.txt') as f:
+        print(f.read())
+
+Outputs::
+
+    000000.002 Q-RX reset_input_buffer
+    000000.002 DTR  inactive
+    000000.002 TX   0000  68 65 6C 6C 6F 20 77 6F  72 6C 64                 hello world     
+    000001.015 RX   0000  68 65 6C 6C 6F 20 77 6F  72 6C 64                 hello world     
+    000001.015 DTR  active
+    000001.015 TX   0000  00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  ................
+    000001.015 TX   0010  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F  ................
+    000001.015 TX   0020  20 21 22 23 24 25 26 27  28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
+    000001.015 TX   0030  30 31 32 33 34 35 36 37  38 39 3A 3B 3C 3D 3E 3F  0123456789:;<=>?
+    000001.015 TX   0040  40 41 42 43 44 45 46 47  48 49 4A 4B 4C 4D 4E 4F  @ABCDEFGHIJKLMNO
+    000001.016 TX   0050  50 51 52 53 54 55 56 57  58 59 5A 5B 5C 5D 5E 5F  PQRSTUVWXYZ[\]^_
+    000001.016 TX   0060  60 61 62 63 64 65 66 67  68 69 6A 6B 6C 6D 6E 6F  `abcdefghijklmno
+    000001.016 TX   0070  70 71 72 73 74 75 76 77  78 79 7A 7B 7C 7D 7E 7F  pqrstuvwxyz{|}~.
+    000001.016 TX   0080  80 81 82 83 84 85 86 87  88 89 8A 8B 8C 8D 8E 8F  ................
+    000001.016 TX   0090  90 91 92 93 94 95 96 97  98 99 9A 9B 9C 9D 9E 9F  ................
+    000001.016 TX   00A0  A0 A1 A2 A3 A4 A5 A6 A7  A8 A9 AA AB AC AD AE AF  ................
+    000001.016 TX   00B0  B0 B1 B2 B3 B4 B5 B6 B7  B8 B9 BA BB BC BD BE BF  ................
+    000001.016 TX   00C0  C0 C1 C2 C3 C4 C5 C6 C7  C8 C9 CA CB CC CD CE CF  ................
+    000001.016 TX   00D0  D0 D1 D2 D3 D4 D5 D6 D7  D8 D9 DA DB DC DD DE DF  ................
+    000001.016 TX   00E0  E0 E1 E2 E3 E4 E5 E6 E7  E8 E9 EA EB EC ED EE EF  ................
+    000001.016 TX   00F0  F0 F1 F2 F3 F4 F5 F6 F7  F8 F9 FA FB FC FD FE FF  ................
+    000002.284 RX   0000  00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  ................
+    000002.284 RX   0010  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F  ................
+    000002.284 RX   0020  20 21 22 23 24 25 26 27  28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
+    000002.284 RX   0030  30 31 32 33 34 35 36 37  38 39 3A 3B 3C 3D 3E 3F  0123456789:;<=>?
+    000002.284 RX   0040  40 41 42 43 44 45 46 47  48 49 4A 4B 4C 4D 4E 4F  @ABCDEFGHIJKLMNO
+    000002.284 RX   0050  50 51 52 53 54 55 56 57  58 59 5A 5B 5C 5D 5E 5F  PQRSTUVWXYZ[\]^_
+    000002.284 RX   0060  60 61 62 63 64 65 66 67  68 69 6A 6B 6C 6D 6E 6F  `abcdefghijklmno
+    000002.284 RX   0070  70 71 72 73 74 75 76 77  78 79 7A 7B 7C 7D 7E 7F  pqrstuvwxyz{|}~.
+    000002.284 RX   0080  80 81 82 83 84 85 86 87  88 89 8A 8B 8C 8D 8E 8F  ................
+    000002.284 RX   0090  90 91 92 93 94 95 96 97  98 99 9A 9B 9C 9D 9E 9F  ................
+    000002.284 RX   00A0  A0 A1 A2 A3 A4 A5 A6 A7  A8 A9 AA AB AC AD AE AF  ................
+    000002.284 RX   00B0  B0 B1 B2 B3 B4 B5 B6 B7  B8 B9 BA BB BC BD BE BF  ................
+    000002.284 RX   00C0  C0 C1 C2 C3 C4 C5 C6 C7  C8 C9 CA CB CC CD CE CF  ................
+    000002.284 RX   00D0  D0 D1 D2 D3 D4 D5 D6 D7  D8 D9 DA DB DC DD DE DF  ................
+    000002.284 RX   00E0  E0 E1 E2 E3 E4 E5 E6 E7  E8 E9 EA EB EC ED EE EF  ................
+    000002.284 RX   00F0  F0 F1 F2 F3 F4 F5 F6 F7  F8 F9 FA FB FC FD FE FF  ................
+    000002.284 BRK  send_break 0.25
+
+.. versionadded:: 3.0
+
+
+Examples
+========
+
+- ``rfc2217://localhost:7000``
+- ``rfc2217://localhost:7000?poll_modem``
+- ``rfc2217://localhost:7000?ign_set_control&timeout=5.5``
+- ``socket://localhost:7777``
+- ``loop://?logging=debug``
+- ``hwgrep://0451:f432`` (USB VID:PID)
+- ``spy://COM54?file=log.txt``
+
+
