diff --git a/compiler2/enum.c b/compiler2/enum.c
index 6ef38a0728a1fe5be25e79db27a34e4594cd6130..0036af9e79291eb25445db06d285e20fc11e3c6e 100644
--- a/compiler2/enum.c
+++ b/compiler2/enum.c
@@ -29,6 +29,7 @@
 #include "encdec.h"
 
 #include <stdlib.h>
+#include <string.h>
 
 #include "main.hh"
 #include "ttcn3/compiler.h"
@@ -268,13 +269,15 @@ void defEnumClass(const enum_def *edef, output_struct *output)
   src = mputprintf(src, "%s %s::str_to_enum(const char *str_par)\n"
     "{\n", qualified_enum_type, name);
   for (i = 0; i < edef->nElements; i++) {
-    if (edef->elements[i].text) {
-      src = mputprintf(src, "if (!strcmp(str_par, \"%s\") || !strcmp(str_par, \"%s\") || !strcmp(str_par, \"%s\")) return %s;\n"
-        "else ", edef->elements[i].text, edef->elements[i].descaped_text, edef->elements[i].dispname, edef->elements[i].name);
-    }
-    else {
+    if (!edef->elements[i].text) {
       src = mputprintf(src, "if (!strcmp(str_par, \"%s\")) return %s;\n"
         "else ", edef->elements[i].dispname, edef->elements[i].name);
+    } else if (!strcmp(edef->elements[i].text, edef->elements[i].descaped_text)) {
+      src = mputprintf(src, "if (!strcmp(str_par, \"%s\") || !strcmp(str_par, \"%s\")) return %s;\n"
+        "else ", edef->elements[i].text, edef->elements[i].dispname, edef->elements[i].name);
+    } else {
+      src = mputprintf(src, "if (!strcmp(str_par, \"%s\") || !strcmp(str_par, \"%s\") || !strcmp(str_par, \"%s\")) return %s;\n"
+        "else ", edef->elements[i].text, edef->elements[i].descaped_text, edef->elements[i].dispname, edef->elements[i].name);
     }
   }
   src = mputprintf(src, "return %s;\n"