diff --git a/lib/apex/encoder.rb b/lib/apex/encoder.rb
index 089aa0909be7468c4214de23dad9a487d3905913..b1585810f530ee084c04bb1cf02c9e62f11c9453 100644
--- a/lib/apex/encoder.rb
+++ b/lib/apex/encoder.rb
@@ -1,2 +1,3 @@
 require 'apex/encoder/aprs_kiss'
 require 'apex/encoder/igate_tcp'
+require 'apex/encoder/encoder'
diff --git a/lib/apex/encoder/aprs_kiss.rb b/lib/apex/encoder/aprs_kiss.rb
index fa4ec7efbb81de4f79c888d61e90a7a6f6fba121..d1114ce659c689e0f5a78c0418ab548249da3fee 100644
--- a/lib/apex/encoder/aprs_kiss.rb
+++ b/lib/apex/encoder/aprs_kiss.rb
@@ -1,15 +1,21 @@
 require 'apex/frame'
+require 'kiss'
+require 'apex/encoder/encoder'
 
 module Apex
     class AprsKiss
+        include Encoder
 
         ##
         # Creates a new AprsKiss encoder
         #
-        # @param data_stream [Kiss::KissAbstract] The underlying data stream
-        #    frames are written to.
+        # @param data_stream [Kiss::Kiss] The underlying data stream frames are
+        #     written to.
         protected
         def initialize(data_stream)
+            raise ArgumentError.new("data_stream can not be nil") if data_stream.nil?
+            raise ArgumentError.new("data_stream must be a Kiss class: #{data_stream.to_s}") unless data_stream.kind_of? Kiss::Kiss
+
             @data_stream = data_stream
         end
 
diff --git a/lib/apex/encoder/encoder.rb b/lib/apex/encoder/encoder.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0ac43964376cec0a65d0ab12d0b4455854ed4baa
--- /dev/null
+++ b/lib/apex/encoder/encoder.rb
@@ -0,0 +1,9 @@
+require 'abstractify'
+
+module Apex
+  module Encoder
+    include Abstractify::Abstract
+
+    abstract :write_interface, :read_interface, :connect, :close
+  end
+end
diff --git a/lib/apex/encoder/igate_tcp.rb b/lib/apex/encoder/igate_tcp.rb
index 321787273a52128ddb1f3270ffae765f7c6cdeef..beff68bdf7720b4a68dd500f7054fcb3a25ae5c3 100644
--- a/lib/apex/encoder/igate_tcp.rb
+++ b/lib/apex/encoder/igate_tcp.rb
@@ -2,6 +2,8 @@ require 'apex/app_info'
 
 module Apex
     class IGateTcp
+        include Encoder
+
         DEFAULT_APRSIS_URL = 'http://srvr.aprs-is.net:8080'
         DEFAULT_APRSIS_SERVER = 'rotate.aprs.net'
         DEFAULT_APRSIS_FILTER_PORT = 14580