diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index d18197faf7ca6cbbcb7077ee625f49404fb6287c..2fef74115903136b9b07f063541bb2eb322a6a04 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1 +1,2 @@
-Paul McMillan
+- Paul McMillan N1HHG - https://github.com/PaulMcMillan
+- John Hogenmiller KB3DFZ - https://github.com/ytjohn
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
index 11c15bebb4714255af71b3efebfe0499830d309c..51d1495e3fab1cc8bd7b032a3bcc8639780182e9 100644
--- a/COPYRIGHT.txt
+++ b/COPYRIGHT.txt
@@ -1 +1 @@
-Copyright 2013, OnBeep, Inc. and Contributors
+Copyright 2015, Orion Labs, Inc. and Contributors
diff --git a/LICENSE b/LICENSE
index 27bf6062c8e0c6ee782b1910fe1142cfb126be66..79e695608448d19afdb9dbcedd9696bbb2f86231 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2013 OnBeep, Inc. and Contributors
+Copyright 2015 Orion Labs, Inc. and Contributors
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/Makefile b/Makefile
index a2d6bb117f4db31087ba0df2301e7086d0a9d243..9ec00930bfb89c0a2faa82b75c62857e0e0267de 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
 # Makefile for KISS Python Module.
 #
 # Source:: https://github.com/ampledata/kiss
-# Author:: Greg Albrecht W2GMD <gba@onbeep.com>
-# Copyright:: Copyright 2013 OnBeep, Inc. and Contributors
+# Author:: Greg Albrecht W2GMD <gba@orionlabs.co>
+# Copyright:: Copyright 2015 Orion Labs, Inc. and Contributors
 # License:: Apache License, Version 2.0
 #
 
@@ -19,11 +19,7 @@ lint:
 	pylint -f colorized -r n kiss/*.py tests/*.py *.py
 
 flake8:
-	flake8 --exit-zero  --max-complexity 12 kiss/*.py tests/*.py *.py | \
-		awk -F\: '{printf "%s:%s: [E]%s\n", $$1, $$2, $$3}' | tee flake8.log
-
-cli_flake8:
-	flake8 --max-complexity 12 kiss/*.py tests/*.py *.py
+	flake8 --exit-zero  --max-complexity 12 kiss/*.py tests/*.py *.py
 
 pep8: flake8
 
diff --git a/README.rst b/README.rst
index cb94bfc5a5c91d8d376a2d14d516d9037947dc43..438ad38f0d56115cd4d6558cebd2522a1c0d4556 100644
--- a/README.rst
+++ b/README.rst
@@ -21,6 +21,9 @@ Read & print frames from a TNC connected to '/dev/ttyUSB0' at 1200 baud::
     k.read(callback=print)
 
 
+See also: examples/ directory.
+
+
 Testing
 =======
 Run nosetests from a Makefile target::
@@ -51,14 +54,14 @@ https://github.com/ampledata/kiss
 
 Author
 ======
-Greg Albrecht W2GMD gba@onbeep.com
+Greg Albrecht W2GMD gba@orionlabs.co
 
 http://ampledata.org/
 
 
 Copyright
 =========
-Copyright 2013 OnBeep, Inc. and Contributors
+Copyright 2015 Orion Labs, Inc. and Contributors
 
 
 License
diff --git a/examples/socketread.py b/examples/socketread.py
index da0eda1770ff354a4148c13a8c41a51baf7be0c6..ba5fd23e50f9ee8ccd1fa26b59ea20a9227e322e 100644
--- a/examples/socketread.py
+++ b/examples/socketread.py
@@ -1,12 +1,39 @@
+#!/usr/bin/env python
+"""
+Reads & Prints KISS frames from a TCP Socket.
 
+For use with programs like Dire Wolf.
+"""
+
+
+import aprs
 import kiss
+import logging
+
+
+def print_frame(frame):
+    try:
+        # Decode raw APRS frame into dictionary of separate sections
+        decoded_frame = aprs.util.decode_frame(frame)
+
+        # Format the APRS frame (in Raw ASCII Text) as a human readable frame
+        formatted_aprs = aprs.util.format_aprs_frame(decoded_frame)
+
+        # This is the human readable APRS output:
+        print formatted_aprs
+
+    except Exception as ex:
+        print ex
+        print "Error decoding frame:"
+        print "\t%s" % frame
+
 
-k = kiss.KISS(host='10.10.0.214', speed=115200, port=8001)
-k.logger.LOG_LEVEL = "DEBUG"
-k.start()  # inits the TNC, optionally passes KISS config flags.
-# k.write("testing")
-# k.read()
-# k.write('KB3DFZ-5>APDW10,WIDE1-1,WIDE2-1:testing')
-k.read()
+def main():
+    ki = kiss.KISS(host='10.42.10.170', tcp_port=8001)
+    ki.logger.setLevel(logging.INFO)
+    ki.start()
+    ki.read(callback=print_frame)
 
 
+if __name__ == '__main__':
+    main()
diff --git a/kiss/__init__.py b/kiss/__init__.py
index 52f74387ded68f486bbc664a548c45dad154c928..5d09f1f2dcbda0547836f2c597bbd9a3d38031aa 100644
--- a/kiss/__init__.py
+++ b/kiss/__init__.py
@@ -8,16 +8,16 @@ KISS Python Module.
 ~~~~
 
 
-:author: Greg Albrecht W2GMD <gba@onbeep.com>
-:copyright: Copyright 2013 OnBeep, Inc. and Contributors
+:author: Greg Albrecht W2GMD <gba@orionlabs.co>
+:copyright: Copyright 2015 Orion Labs, Inc. and Contributors
 :license: Apache License, Version 2.0
 :source: <https://github.com/ampledata/kiss>
 
 """
 
-__author__ = 'Greg Albrecht W2GMD <gba@onbeep.com>'
+__author__ = 'Greg Albrecht W2GMD <gba@orionlabs.co>'
+__copyright__ = 'Copyright 2015 Orion Labs, Inc. and Contributors'
 __license__ = 'Apache License, Version 2.0'
-__copyright__ = 'Copyright 2013 OnBeep, Inc. and Contributors'
 
 
 import logging
diff --git a/kiss/classes.py b/kiss/classes.py
index dbff06543a2e08507704af2bc36f798c0ea334ea..029caa4468af05f6e7998771a978f48acd7b10ba 100644
--- a/kiss/classes.py
+++ b/kiss/classes.py
@@ -3,8 +3,8 @@
 
 """KISS Core Classes."""
 
-__author__ = 'Greg Albrecht W2GMD <gba@onbeep.com>'
-__copyright__ = 'Copyright 2013 OnBeep, Inc. and Contributors'
+__author__ = 'Greg Albrecht W2GMD <gba@orionlabs.co>'
+__copyright__ = 'Copyright 2015 Orion Labs, Inc. and Contributors'
 __license__ = 'Apache License, Version 2.0'
 
 
@@ -30,24 +30,35 @@ class KISS(object):
     logger.addHandler(console_handler)
     logger.propagate = False
 
-    def __init__(self, port=None, speed=None, host=None, tcpport=None):
+    def __init__(self, port=None, speed=None, host=None, tcp_port=None):
         self.port = port
         self.speed = speed
         self.host = host
-        self.serial_int = None
+        self.tcp_port = tcp_port
+        self.interface = None
+        self.interface_mode = None
+
+        if self.port is not None and self.speed is not None:
+            self.interface_mode = 'serial'
+        elif self.host is not None and self.tcp_port is not None:
+            self.interface_mode = 'tcp'
+        if self.interface_mode is None:
+            raise Exception('Must set port/speed or host/tcp_port.')
+
+        self.logger.info('Using interface_mode=%s', self.interface_mode)
 
     def __enter__(self):
         return self
 
     def __exit__(self, exc_type, exc_val, exc_tb):
-        if self.host:
-            self.serial_int.shutdown()
-        elif self.serial_int and self.serial_int.isOpen():
-            self.serial_int.close()
+        if 'tcp' in self.interface_mode:
+            self.interface.shutdown()
+        elif self.interface and self.interface.isOpen():
+            self.interface.close()
 
     def __del__(self):
-        if self.serial_int and self.serial_int.isOpen():
-            self.serial_int.close()
+        if self.interface and self.interface.isOpen():
+            self.interface.close()
 
     def start(self, **kwargs):
         """
@@ -59,23 +70,23 @@ class KISS(object):
         :param **kwargs: name/value pairs to use as initial config values.
         """
         self.logger.debug("kwargs=%s", kwargs)
-        if self.host:
-            address = (self.host, self.port)
-            self.serial_int = socket.create_connection(address)
-        else:
-            self.serial_int = serial.Serial(self.port, self.speed)
-            self.serial_int.timeout = kiss.constants.SERIAL_TIMEOUT
+
+        if 'tcp' in self.interface_mode:
+            address = (self.host, self.tcp_port)
+            self.interface = socket.create_connection(address)
+        elif 'serial' in self.interface_mode:
+            self.interface = serial.Serial(self.port, self.speed)
+            self.interface.timeout = kiss.constants.SERIAL_TIMEOUT
 
         # If no settings specified, default to config values similar
-        # to those that ship with xastir.
+        # to those that ship with Xastir.
         if not kwargs:
             kwargs = kiss.constants.DEFAULT_KISS_CONFIG_VALUES
 
-        if not self.host:
+        if 'serial' in self.interface_mode:
             for name, value in kwargs.items():
                 self.write_setting(name, value)
 
-    
     def write_setting(self, name, value):
         """
         Writes KISS Command Codes to attached device.
@@ -88,10 +99,10 @@ class KISS(object):
         self.logger.debug('Configuring %s = %s', name, repr(value))
 
         # Do the reasonable thing if a user passes an int
-        if type(value) == int:
+        if isinstance(value, int):
             value = chr(value)
 
-        return self.serial_int.write(
+        return self.interface.write(
             kiss.constants.FEND +
             getattr(kiss.constants, name.upper()) +
             kiss.util.escape_special_codes(value) +
@@ -105,23 +116,21 @@ class KISS(object):
         :param callback: Callback to call with decoded data.
         """
         self.logger.debug('callback=%s', callback)
+
         read_buffer = ''
 
         while 1:
-            if self.host:
-                read_data = self.serial_int.recv(kiss.constants.READ_BYTES)
-                print read_data
-                waiting_data = None
-            else:
-                read_data = self.serial_int.read(kiss.constants.READ_BYTES)
-                waiting_data = self.serial_int.inWaiting()
-
-
-            if waiting_data:
-                read_data = ''.join([
-                    read_data, self.serial_int.read(waiting_data)])
-
-            if read_data:
+            read_data = None
+            if 'tcp' in self.interface_mode:
+                read_data = self.interface.recv(kiss.constants.READ_BYTES)
+            elif 'serial' in self.interface_mode:
+                read_data = self.interface.read(kiss.constants.READ_BYTES)
+                waiting_data = self.interface.inWaiting()
+                if waiting_data:
+                    read_data = ''.join([
+                        read_data, self.interface.read(waiting_data)])
+
+            if read_data is not None:
                 frames = []
 
                 split_data = read_data.split(kiss.constants.FEND)
@@ -157,24 +166,28 @@ class KISS(object):
                     if len(frame) and ord(frame[0]) == 0:
                         self.logger.debug('frame=%s', frame)
                         if callback:
-                            callback(frame)
+                            if 'tcp' in self.interface_mode:
+                                callback(
+                                    frame.lstrip(
+                                        kiss.constants.DATA_FRAME).strip())
+                            elif 'serial' in self.interface_mode:
+                                callback(frame)
 
     def write(self, frame):
         """
-        Writes frame to KISS device.
+        Writes frame to KISS interface.
 
         :param frame: Frame to write.
         """
+        interface_handler = None
 
-        if self.host:
-            return self.serial_int.send(''.join([
-                kiss.constants.FEND,
-                kiss.constants.DATA_FRAME,
-                kiss.util.escape_special_codes(frame),
-                kiss.constants.FEND
-            ]))
-        else:
-            return self.serial_int.write(''.join([
+        if 'tcp' in self.interface_mode:
+            interface_handler = self.interface.send
+        elif 'serial' in self.interface_mode:
+            interface_handler = self.interface.write
+
+        if interface_handler is not None:
+            return interface_handler(''.join([
                 kiss.constants.FEND,
                 kiss.constants.DATA_FRAME,
                 kiss.util.escape_special_codes(frame),
diff --git a/kiss/constants.py b/kiss/constants.py
index 7a3a45b891cb7dd055e2058ff6c52cadb9b32da7..393c51734751e7564519bf785acf8bcb9ad66d33 100644
--- a/kiss/constants.py
+++ b/kiss/constants.py
@@ -3,8 +3,8 @@
 
 """Constants for KISS Python Module."""
 
-__author__ = 'Greg Albrecht W2GMD <gba@onbeep.com>'
-__copyright__ = 'Copyright 2013 OnBeep, Inc. and Contributors'
+__author__ = 'Greg Albrecht W2GMD <gba@orionlabs.co>'
+__copyright__ = 'Copyright 2015 Orion Labs, Inc. and Contributors'
 __license__ = 'Apache License, Version 2.0'
 
 
diff --git a/kiss/util.py b/kiss/util.py
index 13eabbc2decbba535080147bbdba8e2928a61c62..e298135b6adf3e249d26889b05cc415dd7e4da07 100644
--- a/kiss/util.py
+++ b/kiss/util.py
@@ -3,8 +3,8 @@
 
 """Utilities for the KISS Python Module."""
 
-__author__ = 'Greg Albrecht W2GMD <gba@onbeep.com>'
-__copyright__ = 'Copyright 2013 OnBeep, Inc. and Contributors'
+__author__ = 'Greg Albrecht W2GMD <gba@orionlabs.co>'
+__copyright__ = 'Copyright 2015 Orion Labs, Inc. and Contributors'
 __license__ = 'Apache License, Version 2.0'
 
 
diff --git a/requirements.txt b/requirements.txt
index 818474d7001ad224deda772d1829a4e4ec4f037f..b65e6c221551468ae443cd10ac10ff9b891749a2 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,8 +1,8 @@
 # Python Distribution Package Requirements for KISS.
 #
 # Source:: https://github.com/ampledata/kiss
-# Author:: Greg Albrecht W2GMD <gba@onbeep.com>
-# Copyright:: Copyright 2013 OnBeep, Inc. and Contributors
+# Author:: Greg Albrecht W2GMD <gba@orionlabs.co>
+# Copyright:: Copyright 2015 Orion Labs, Inc. and Contributors
 # License:: Apache License, Version 2.0
 
 
diff --git a/setup.cfg b/setup.cfg
index 7c056b02e5ee001aada0150c199a2f681562706d..12f7acf7ce9470bada93cdf30f254b9b3df66c86 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,8 +1,8 @@
 # Nosetests configuration for KISS.
 #
 # Source:: https://github.com/ampledata/kiss
-# Author:: Greg Albrecht W2GMD <gba@onbeep.com>
-# Copyright:: Copyright 2013 OnBeep, Inc. and Contributors
+# Author:: Greg Albrecht W2GMD <gba@orionlabs.co>
+# Copyright:: Copyright 2015 Orion Labs, Inc. and Contributors
 # License:: Apache License, Version 2.0
 #
 
diff --git a/setup.py b/setup.py
index b3b5e6692f2e6773283b24b4700ac844348b4fce..f2f777066123d69bde499671a0d8a44da8a78c27 100644
--- a/setup.py
+++ b/setup.py
@@ -10,8 +10,8 @@ Source:: https://github.com/ampledata/kiss
 __title__ = 'kiss'
 __version__ = '2.0.2'
 __build__ = '0x020002'
-__author__ = 'Greg Albrecht W2GMD <gba@onbeep.com>'
-__copyright__ = 'Copyright 2013 OnBeep, Inc. and Contributors'
+__author__ = 'Greg Albrecht W2GMD <gba@orionlabs.co>'
+__copyright__ = 'Copyright 2015 Orion Labs, Inc. and Contributors'
 __license__ = 'Apache License, Version 2.0'
 
 
@@ -42,7 +42,7 @@ setup(
     description='KISS Python Module.',
     long_description=open('README.rst').read(),
     author='Greg Albrecht',
-    author_email='gba@onbeep.com',
+    author_email='gba@orionlabs.co',
     license=open('LICENSE').read(),
     url='https://github.com/ampledata/kiss',
     setup_requires=['nose'],
diff --git a/tests/constants.py b/tests/constants.py
index 2877af25a22a6ff71e62f6729d935449993e4e2b..602173743e707faa5f7e20ac3a8f44c3e669bce7 100644
--- a/tests/constants.py
+++ b/tests/constants.py
@@ -3,8 +3,8 @@
 
 """Constants for KISS Module Tests."""
 
-__author__ = 'Greg Albrecht W2GMD <gba@onbeep.com>'
-__copyright__ = 'Copyright 2013 OnBeep, Inc. and Contributors'
+__author__ = 'Greg Albrecht W2GMD <gba@orionlabs.co>'
+__copyright__ = 'Copyright 2015 Orion Labs, Inc. and Contributors'
 __license__ = 'Apache License, Version 2.0'
 
 
diff --git a/tests/context.py b/tests/context.py
index 6654f6e11f78b0380eadf131d42181a36f3198c2..54a2d0012eaa29f179cac207fc8c0af8fcf8739a 100644
--- a/tests/context.py
+++ b/tests/context.py
@@ -3,6 +3,10 @@
 
 """Context for tests for KISS Python Module."""
 
+__author__ = 'Greg Albrecht W2GMD <gba@orionlabs.co>'
+__copyright__ = 'Copyright 2015 Orion Labs, Inc. and Contributors'
+__license__ = 'Apache License, Version 2.0'
+
 
 import os
 import sys
diff --git a/tests/test_kiss_util.py b/tests/test_kiss_util.py
index c5e91c85dbb416eb2468b7eee194764ead5c8460..8e1d18e75358aa596e138e44a632fa5bbd12d774 100644
--- a/tests/test_kiss_util.py
+++ b/tests/test_kiss_util.py
@@ -3,8 +3,8 @@
 
 """Tests for KISS Util Module."""
 
-__author__ = 'Greg Albrecht W2GMD <gba@onbeep.com>'
-__copyright__ = 'Copyright 2013 OnBeep, Inc. and Contributors'
+__author__ = 'Greg Albrecht W2GMD <gba@orionlabs.co>'
+__copyright__ = 'Copyright 2015 Orion Labs, Inc. and Contributors'
 __license__ = 'Apache License, Version 2.0'