Index: libcfa/src/enum.cfa
===================================================================
--- libcfa/src/enum.cfa	(revision c2a4b62607d7da7ffdc021b111cfd67841ea84bd)
+++ libcfa/src/enum.cfa	(revision 03ac869ba936d84782b411f70f57192f4bceb4da)
@@ -2,10 +2,12 @@
 #include "fstream.hfa"
 
-forall(E, T| TypedEnum(E, T)) {
+#pragma GCC visibility push(default)
+
+forall(T, E| TypedEnum(T, E)) {
     // constructors
 
     // comparison
     int ?==?(E l, E r) { return posE(l) == posE(r); }
-    int ?!=?(E l, E r) { return !(l == r); }
+    int ?!=?(E l, E r) { return posE(l) != posE(r); }
     int ?!=?(E l, zero_t) { return !( posE(l) == 0 ); }
     int ?<?(E l, E r) { return posE(l) < posE(r); }
@@ -13,11 +15,3 @@
     int ?>?(E l, E r) { return posE(l) > posE(r); }
     int ?>=?(E l, E r) {  return posE(l) >= posE(r); }
-
-    // for testing; To be removed
-    // #include <string.h>
-    char * typeEnumString(E e) {
-        // char* out = malloc(sizeof(char) * (5 + strlen(labelE(e) + 1)));
-        // return strcat(strcat(out, "Enum "), labelE(e));
-        return labelE(e);
-    }
 }
Index: libcfa/src/enum.hfa
===================================================================
--- libcfa/src/enum.hfa	(revision c2a4b62607d7da7ffdc021b111cfd67841ea84bd)
+++ libcfa/src/enum.hfa	(revision 03ac869ba936d84782b411f70f57192f4bceb4da)
@@ -7,5 +7,5 @@
     };
 
-    forall(E| Bounded(E, T)) trait Serial {
+    forall(E| Bounded(T, E)) trait Serial {
         unsigned fromInstance(E e);
         E fromInt(unsigned i);
@@ -15,27 +15,23 @@
 
     // Opague Enum + TypedEnum
-    forall(E | Serial(E, T)) trait CfaEnum { 
+    forall(E | Serial(T, E)) trait CfaEnum { 
         char * labelE(E e);
         unsigned int posE(E e);
     };
 
-    forall(E | CfaEnum(E, T)) trait TypedEnum {
+    forall(E| CfaEnum(T, E)) trait TypedEnum {
         T valueE(E e);
     };
-
-    forall(E | TypedEnum(E, T)) {
-        // comparison
-        int ?==?(E l, E r);
-        int ?!=?(E l, E r);
-        int ?!=?(E l, zero_t);
-        int ?<?(E l, E r);
-        int ?<=?(E l, E r);
-        int ?>?(E l, E r);
-        int ?>=?(E l, E r);
-
-        // for testing; To be removed
-        // char * typeEnumString(E e);
-        char * typeEnumString(E e);
-    }
 }
 
+
+forall(T, E | TypedEnum(T, E)) {
+    // comparison
+    int ?==?(E l, E r);
+    int ?!=?(E l, E r);
+    int ?!=?(E l, zero_t);
+    int ?<?(E l, E r);
+    int ?<=?(E l, E r);
+    int ?>?(E l, E r);
+    int ?>=?(E l, E r);
+}
