diff --git a/serial/tools/hexlify_codec.py b/serial/tools/hexlify_codec.py
index 6d42080..f8449e2 100644
--- a/serial/tools/hexlify_codec.py
+++ b/serial/tools/hexlify_codec.py
@@ -3,11 +3,19 @@
 # This is a codec to create and decode hexdumps with spaces between characters. used by miniterm.
 #
 # This file is part of pySerial. https://github.com/pyserial/pyserial
-# (C) 2011 Chris Liechti <cliechti@gmx.net>
+# (C) 2015-2016 Chris Liechti <cliechti@gmx.net>
 #
 # SPDX-License-Identifier:    BSD-3-Clause
 """\
 Python 'hex' Codec - 2-digit hex with spaces content transfer encoding.
+
+Encode and decode may be a bit missleading at first sight...
+
+The textual representation is a hex dump: e.g. "40 41"
+The "encoded" data of this is the binary form, e.g. b"@A"
+
+Therefore decoding is binary to text and thus converting binary data to hex dump.
+
 """
 
 import codecs
@@ -18,23 +26,28 @@
 
 # Codec APIs
 
-def hex_encode(input, errors='strict'):
-    return (serial.to_bytes([int(h, 16) for h in input.split()]), len(input))
+def hex_encode(data, errors='strict'):
+    """'40 41 42' -> '@ab'"""
+    return (serial.to_bytes([int(h, 16) for h in data.split()]), len(data))
 
 
-def hex_decode(input, errors='strict'):
-    return (''.join('{:02X} '.format(b) for b in input), len(input))
+def hex_decode(data, errors='strict'):
+    """'@ab' -> '40 41 42'"""
+    return (''.join('{:02X} '.format(b) for b in data), len(data))
 
 
 class Codec(codecs.Codec):
-    def encode(self, input, errors='strict'):
-        return serial.to_bytes([int(h, 16) for h in input.split()])
+    def encode(self, data, errors='strict'):
+        """'40 41 42' -> '@ab'"""
+        return serial.to_bytes([int(h, 16) for h in data.split()])
 
-    def decode(self, input, errors='strict'):
-        return ''.join('{:02X} '.format(b) for b in input)
+    def decode(self, data, errors='strict'):
+        """'@ab' -> '40 41 42'"""
+        return ''.join('{:02X} '.format(b) for b in data)
 
 
 class IncrementalEncoder(codecs.IncrementalEncoder):
+    """Incremental hex encoder"""
 
     def __init__(self, errors='strict'):
         self.errors = errors
@@ -49,10 +62,15 @@
     def setstate(self, state):
         self.state = state
 
-    def encode(self, input, final=False):
+    def encode(self, data, final=False):
+        """\
+        Incremental encode, keep track of digits and emit a byte when a pair
+        of hex digits is found. The space is optional unless the error
+        handling is defined to be 'strict'.
+        """
         state = self.state
         encoded = []
-        for c in input.upper():
+        for c in data.upper():
             if c in HEXDIGITS:
                 z = HEXDIGITS.index(c)
                 if state:
@@ -72,21 +90,21 @@
 
 
 class IncrementalDecoder(codecs.IncrementalDecoder):
-    def decode(self, input, final=False):
-        return ''.join('{:02X} '.format(b) for b in input)
+    """Incremental decoder"""
+    def decode(self, data, final=False):
+        return ''.join('{:02X} '.format(b) for b in data)
 
 
 class StreamWriter(Codec, codecs.StreamWriter):
-    pass
+    """Combination of hexlify codec and StreamWriter"""
 
 
 class StreamReader(Codec, codecs.StreamReader):
-    pass
+    """Combination of hexlify codec and StreamReader"""
 
 
-# encodings module API
-
 def getregentry():
+    """encodings module API"""
     return codecs.CodecInfo(
         name='hexlify',
         encode=hex_encode,
