diff --git a/libtelnet.h b/libtelnet.h
index 729bd50..821839f 100644
--- a/libtelnet.h
+++ b/libtelnet.h
@@ -12,6 +12,10 @@
 #if !defined(LIBTELNET_INCLUDE)
 #define LIBTELNET_INCLUDE 1
 
+/* forward declarations */
+struct libtelnet_t;
+struct libtelnet_cb_t;
+
 /* telnet special values */
 #define LIBTELNET_IAC 255
 #define LIBTELNET_DONT 254
@@ -108,10 +112,40 @@
 	LIBTELNET_ERROR_UNKNOWN /* some crazy unexplainable unknown error */
 };
 
+/* libtelnet callback declarations */
+struct libtelnet_cb_t {
+	/* received (processed) data */
+	void (*data)(struct libtelnet_t *telnet,
+			unsigned char *buffer, unsigned int size, void *user_data);
+	/* processed data to buffer for sending */
+	void (*send)(struct libtelnet_t *telnet,
+			unsigned char *buffer, unsigned int size, void *user_data);
+	/* unknown command notification */
+	void (*command)(struct libtelnet_t *telnet,
+			unsigned char cmd, void *user_data);
+	/* negotiation notification */
+	void (*negotiate)(struct libtelnet_t *telnet,
+			unsigned char cmd, unsigned char opt, void *user_data);
+	/* unknown subnegotiation notification */
+	void (*subnegotiation)(struct libtelnet_t *telnet,
+			unsigned char opt, unsigned char *data, unsigned int size,
+			void *user_data);
+	/* error handler */
+	void (*error)(struct libtelnet_t *telnet,
+			enum libtelnet_error_t error, void *user_data);
+
+	#ifdef HAVE_ZLIB
+	void (*compress)(struct libtelnet_t *telnet,
+			char enabled, void *user_data);
+	#endif
+};
+
 /* state tracker */
 struct libtelnet_t {
-	/* zlib (mccp2) compression */
+	/* callback table */
+	struct libtelnet_cb_t *cb;
 #ifdef HAVE_ZLIB
+	/* zlib (mccp2) compression */
 	z_stream *zlib;
 #endif
 	/* sub-request buffer */
@@ -126,30 +160,9 @@
 	enum libtelnet_mode_t mode;
 };
 
-/* libtelnet callback declarations
- * APPLICATION MUST IMPLEMENT THESE FUNCTIONS!!
- */
-extern void libtelnet_data_cb(struct libtelnet_t *telnet,
-		unsigned char *buffer, unsigned int size, void *user_data);
-extern void libtelnet_send_cb(struct libtelnet_t *telnet,
-		unsigned char *buffer, unsigned int size, void *user_data);
-extern void libtelnet_command_cb(struct libtelnet_t *telnet,
-		unsigned char cmd, void *user_data);
-extern void libtelnet_negotiate_cb(struct libtelnet_t *telnet,
-		unsigned char cmd, unsigned char opt, void *user_data);
-extern void libtelnet_subnegotiation_cb(struct libtelnet_t *telnet,
-		unsigned char opt, unsigned char *data, unsigned int size,
-		void *user_data);
-#ifdef HAVE_ZLIB
-extern void libtelnet_compress_cb(struct libtelnet_t *telnet,
-		char enabled, void *user_data);
-#endif
-extern void libtelnet_error_cb(struct libtelnet_t *telnet,
-		enum libtelnet_error_t error, void *user_data);
-
 /* initialize a telnet state tracker */
 extern void libtelnet_init(struct libtelnet_t *telnet,
-		enum libtelnet_mode_t mode);
+		struct libtelnet_cb_t *cb, enum libtelnet_mode_t mode);
 
 /* free up any memory allocated by a state tracker */
 extern void libtelnet_free(struct libtelnet_t *telnet);
