diff --git a/main/udptl.c b/main/udptl.c
index a0f533fd0cc45bc9fb6c70e88d4427d94b17eb7b..e543b4e8eecebd37983512ac61e34a3048d09d3f 100644
--- a/main/udptl.c
+++ b/main/udptl.c
@@ -769,6 +769,18 @@ struct ast_frame *ast_udptl_read(struct ast_udptl *udptl)
 		return &ast_null_frame;
 	}
 
+	/*
+	 * If early media isn't turned on for the channel driver, it's going to
+	 * drop this frame.  By that time though, udptl has already incremented
+	 * the expected sequence number so if the CPE re-sends, the second frame
+	 * will be dropped as a dup even though the first frame never went through.
+	 * So we drop the frame here if the channel isn't up. 'tag' is set by the
+	 * channel drivers on T38_ENABLED or T38_PEER_REINVITE.
+	 */
+	if (udptl->tag == NULL) {
+		return &ast_null_frame;
+	}
+
 	if (udptl->nat) {
 		/* Send to whoever sent to us */
 		if (ast_sockaddr_cmp(&udptl->them, &addr)) {