diff --git a/channel.c b/channel.c
index ea14aba6dea0899ff86262033a340a871c8c28fe..230aa13d6e4517cb188b3bbe397b608b2bb7185e 100644
--- a/channel.c
+++ b/channel.c
@@ -2746,7 +2746,8 @@ int ast_channel_make_compatible(struct ast_channel *chan, struct ast_channel *pe
 	   transcoding is needed; if desired, force transcode path
 	   to use SLINEAR between channels, but only if there is
 	   no direct conversion available */
-	if ((src != dst) && ast_opt_transcode_via_slin && ast_translate_path_steps(dst, src))
+	if ((src != dst) && ast_opt_transcode_via_slin &&
+	    (ast_translate_path_steps(dst, src) != 1))
 		dst = AST_FORMAT_SLINEAR;
 	if (ast_set_read_format(chan, dst) < 0) {
 		ast_log(LOG_WARNING, "Unable to set read format on channel %s to %d\n", chan->name, dst);
@@ -2769,7 +2770,8 @@ int ast_channel_make_compatible(struct ast_channel *chan, struct ast_channel *pe
 	   transcoding is needed; if desired, force transcode path
 	   to use SLINEAR between channels, but only if there is
 	   no direct conversion available */
-	if ((src != dst) && ast_opt_transcode_via_slin && ast_translate_path_steps(dst, src))
+	if ((src != dst) && ast_opt_transcode_via_slin &&
+	    (ast_translate_path_steps(dst, src) != 1))
 		dst = AST_FORMAT_SLINEAR;
 	if (ast_set_read_format(peer, dst) < 0) {
 		ast_log(LOG_WARNING, "Unable to set read format on channel %s to %d\n", peer->name, dst);
diff --git a/translate.c b/translate.c
index dce4b08270d49810cee602d4f331b9c922b68f9d..0edfa54ca56c245d95a1d67a021e8394c1239070 100644
--- a/translate.c
+++ b/translate.c
@@ -659,5 +659,5 @@ unsigned int ast_translate_path_steps(unsigned int dest, unsigned int src)
 	if (!tr_matrix[src][dest].step)
 		return -1;
 	else
-		return tr_matrix[src][dest].multistep;
+		return tr_matrix[src][dest].multistep + 1;
 }