diff --git a/asterisk.c b/asterisk.c
index b2ab02461168b7e3966199fee145e7e38891e51a..7a5649b891aebbceabdb954687580470abe39242 100644
--- a/asterisk.c
+++ b/asterisk.c
@@ -100,6 +100,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/pbx.h"
 #include "asterisk/enum.h"
 #include "asterisk/rtp.h"
+#if defined(T38_SUPPORT)
+#include "asterisk/udptl.h"
+#endif
 #include "asterisk/app.h"
 #include "asterisk/lock.h"
 #include "asterisk/utils.h"
@@ -2319,6 +2322,9 @@ int main(int argc, char *argv[])
 		exit(1);
 	}
 	ast_rtp_init();
+#if defined(T38_SUPPORT)
+	ast_udptl_init();
+#endif
 	if (ast_image_init()) {
 		printf(term_quit());
 		exit(1);
diff --git a/channel.c b/channel.c
index 54027e457ee27c65cf3ed5af97a9fa46ac31c474..14b95bc58222c390542443dee7dbb78138089836 100644
--- a/channel.c
+++ b/channel.c
@@ -3274,6 +3274,9 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
 		    (f->frametype == AST_FRAME_VIDEO) || 
 		    (f->frametype == AST_FRAME_IMAGE) ||
 		    (f->frametype == AST_FRAME_HTML) ||
+#if defined(T38_SUPPORT)
+		    (f->frametype == AST_FRAME_MODEM) ||
+#endif
 		    (f->frametype == AST_FRAME_TEXT)) {
 			if (f->frametype == AST_FRAME_DTMF) {
 				if (((who == c0) && watch_c0_dtmf) ||
diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h
index ca8397e0ff8dfe189ca944ffbc86401d2fc0b915..7331746bb18d720fa6f9bcce6fba873c7e7ae614 100644
--- a/include/asterisk/frame.h
+++ b/include/asterisk/frame.h
@@ -145,8 +145,16 @@ struct ast_frame {
 /*! Comfort Noise frame (subclass is level of CNG in -dBov), 
     body may include zero or more 8-bit quantization coefficients */
 #define AST_FRAME_CNG		10
-/*! T.38 Fax-over-IP data stream */
-#define AST_FRAME_T38		11
+#if defined(T38_SUPPORT)
+/*! Modem-over-IP data streams */
+#define AST_FRAME_MODEM		11
+
+/* MODEM subclasses */
+/*! T.38 Fax-over-IP */
+#define AST_MODEM_T38		1
+/*! V.150 Modem-over-IP */
+#define AST_MODEM_V150		2
+#endif
 
 /* HTML subclasses */
 /*! Sending a URL */