diff --git a/main/format_cap.c b/main/format_cap.c
index d486d5d8cd2b06c31af3a98c63f1d03b58fb77f7..2221c5339929f5fac0e99275e632c49c9102901e 100644
--- a/main/format_cap.c
+++ b/main/format_cap.c
@@ -230,7 +230,10 @@ int ast_format_cap_append_by_type(struct ast_format_cap *cap, enum ast_media_typ
 			continue;
 		}
 
-		format = ast_format_create(codec);
+		format = ast_format_cache_get(codec->name);
+		if (!format || (codec != ast_format_get_codec(format))) {
+			format = ast_format_create(codec);
+		}
 		ao2_ref(codec, -1);
 
 		if (!format) {