diff --git a/compiler2/Type.cc b/compiler2/Type.cc
index e28d0ae1f7a90323224c99de18634701f6e29e87..c92119bc0ac4295576ab29783f5c58221cd5b459 100644
--- a/compiler2/Type.cc
+++ b/compiler2/Type.cc
@@ -3417,6 +3417,8 @@ namespace Common {
     if (legacy_codec_handling) {
       FATAL_ERROR("Type::add_coding");
     }
+
+    MessageEncodingType_t built_in_coding = get_enc_type(name);
     for (size_t i = 0; i < coding_table.size(); ++i) {
       if (!encode_attrib_mod_conflict && modifier != coding_table[i]->modifier) {
         encode_attrib_mod_conflict = true;
@@ -3426,11 +3428,13 @@ namespace Common {
       const char* coding_name = coding_table[i]->built_in ?
         get_encoding_name(coding_table[i]->built_in_coding) :
         coding_table[i]->custom_coding.name;
-      if (name == coding_name) {
+      const char* current_name = coding_table[i]->built_in ?
+        get_encoding_name(built_in_coding) : name.c_str();
+      if (strcmp(current_name, coding_name) == 0) {
         return; // coding already added
       }
     }
-    MessageEncodingType_t built_in_coding = get_enc_type(name);
+
     if (built_in_coding != CT_CUSTOM && built_in_coding != CT_PER) {
       if (get_type_refd_last()->can_have_coding(built_in_coding)) {
         coding_t* new_coding = new coding_t;