diff -u -r asterisk-1.0.7.dfsg.1/channels/chan_modem.c asterisk-fix/channels/chan_modem.c
--- asterisk-1.0.7.dfsg.1/channels/chan_modem.c	2004-10-24 23:15:23.000000000 +0200
+++ asterisk-fix/channels/chan_modem.c	2005-04-09 17:03:04.000000000 +0200
@@ -524,12 +524,15 @@
 struct ast_channel *ast_modem_new(struct ast_modem_pvt *i, int state)
 {
 	struct ast_channel *tmp;
+	int fmt = ast_best_codec(i->mc->formats);
 	tmp = ast_channel_alloc(1);
 	if (tmp) {
 		snprintf(tmp->name, sizeof(tmp->name), "Modem[%s]/%s", i->mc->name, i->dev + 5);
 		tmp->type = type;
 		tmp->fds[0] = i->fd;
 		tmp->nativeformats = i->mc->formats;
+		tmp->readformat = fmt;
+		tmp->writeformat = fmt;
 		ast_setstate(tmp, state);
 		if (state == AST_STATE_RING)
 			tmp->rings = 1;
