Index: libcfa/src/enum.cfa
===================================================================
--- libcfa/src/enum.cfa	(revision 2f4c9100be60dcd0d7006a9dffcf6c6ae4291fa2)
+++ libcfa/src/enum.cfa	(revision 3e135c895c889427f3db85749ee5eab83dd48070)
@@ -10,5 +10,5 @@
 } // scmp
 
-forall( istype & | istream( istype ), E, V | CfaEnum( E, V ) )
+forall( istype & | istream( istype ), E | CfaEnum( E ) )
 istype & ?|?( istype & is, E & e ) {
 //	printf( "here0\n" );
@@ -70,5 +70,12 @@
 }
 
-forall( ostype & | ostream( ostype ), E, V | CfaEnum( E, V ) ) {
+// forall( ostype & | ostream( ostype ), E | CfaEnum( E, quasi_void ) ) {
+// 	ostype & ?|?( ostype & os, E e ) {
+// 		return os | label( e );
+// 	}
+// 	OSTYPE_VOID_IMPL( E )
+// }
+
+forall( ostype & | ostream( ostype ), E | CfaEnum( E ) ) {
 	ostype & ?|?( ostype & os, E e ) {
 		return os | label( e );
@@ -77,8 +84,3 @@
 }
 
-forall( ostype & | ostream( ostype ), E | CfaEnum( E, quasi_void ) ) {
-	ostype & ?|?( ostype & os, E e ) {
-		return os | label( e );
-	}
-	OSTYPE_VOID_IMPL( E )
-}
+// 
Index: libcfa/src/enum.hfa
===================================================================
--- libcfa/src/enum.hfa	(revision 2f4c9100be60dcd0d7006a9dffcf6c6ae4291fa2)
+++ libcfa/src/enum.hfa	(revision 3e135c895c889427f3db85749ee5eab83dd48070)
@@ -15,8 +15,10 @@
 };
 
-// Design one
-forall( E, V | Serial( E ) ) trait CfaEnum {
+forall( E | Serial( E ) ) trait CfaEnum {
     const char * label( E e );
     unsigned int posn( E e );
+};
+
+forall( E, V | CfaEnum( E ) ) trait TypedEnum {
     V value( E e );
 };
@@ -24,16 +26,16 @@
 // I/O
 
-forall( istype & | istream( istype ), E, V | CfaEnum( E, V ) )
+forall( istype & | istream( istype ), E | CfaEnum( E ) )
 istype & ?|?( istype &, E & );
 
-forall( ostype & | ostream( ostype ), E, V | CfaEnum( E, V ) ) {
+forall( ostype & | ostream( ostype ), E | CfaEnum( E ) ) {
 	ostype & ?|?( ostype &, E );
 	OSTYPE_VOID( E );
 }
 
-forall( ostype & | ostream( ostype ), E | CfaEnum( E, quasi_void ) ) {
-	ostype & ?|?( ostype &, E );
-	OSTYPE_VOID( E );
-}
+// forall( ostype & | ostream( ostype ), E | CfaEnum( E, quasi_void ) ) {
+// 	ostype & ?|?( ostype &, E );
+// 	OSTYPE_VOID( E );
+// }
 
 // Design two <- should go for this if we have change the cost model
@@ -48,5 +50,5 @@
 
 static inline
-forall( E, V | CfaEnum( E, V ) ) {
+forall( E | CfaEnum( E ) ) {
     int ?==?( E l, E r ) { return posn( l ) == posn( r ); }	// relational operators
     int ?!=?( E l, E r ) { return posn( l ) != posn( r ); }
