diff --git a/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/app/CarrierEthernetConnection.java b/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/app/CarrierEthernetConnection.java
index c847480..857f8cc 100644
--- a/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/app/CarrierEthernetConnection.java
+++ b/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/app/CarrierEthernetConnection.java
@@ -23,61 +23,15 @@
 public abstract class CarrierEthernetConnection {
 
     public enum Type {
-
-        POINT_TO_POINT("Point_To_Point"),
-        MULTIPOINT_TO_MULTIPOINT("Multipoint_To_Multipoint"),
-        ROOT_MULTIPOINT("Root_Multipoint");
-
-        private String value;
-
-        Type(String value) {
-            this.value = value;
-        }
-
-        @Override
-        public String toString() {
-            return value;
-        }
-
-        public static Type fromString(String value) {
-            if (value != null) {
-                for (Type b : Type.values()) {
-                    if (value.equals(b.value)) {
-                        return b;
-                    }
-                }
-            }
-            throw new IllegalArgumentException("Type " + value + " is not valid");
-        }
+        POINT_TO_POINT,
+        MULTIPOINT_TO_MULTIPOINT,
+        ROOT_MULTIPOINT
     }
 
     public enum State {
-
-        ACTIVE("Active"),
-        INACTIVE("Inactive"),
-        PARTIAL("Partial");
-
-        private String value;
-
-        State(String value) {
-            this.value = value;
-        }
-
-        @Override
-        public String toString() {
-            return value;
-        }
-
-        public static State fromString(String value) {
-            if (value != null) {
-                for (State b : State.values()) {
-                    if (value.equals(b.value)) {
-                        return b;
-                    }
-                }
-            }
-            throw new IllegalArgumentException("State " + value + " is not valid");
-        }
+        ACTIVE,
+        INACTIVE,
+        PARTIAL
     }
 
     // TODO: Use the ONOS built-in identifier??
diff --git a/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/commands/CarrierEthernetCreateEvcCommand.java b/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/commands/CarrierEthernetCreateEvcCommand.java
index f0ffff4..5e00b7d 100644
--- a/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/commands/CarrierEthernetCreateEvcCommand.java
+++ b/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/commands/CarrierEthernetCreateEvcCommand.java
@@ -106,7 +106,7 @@
                     CarrierEthernetVirtualConnection.Type.POINT_TO_POINT);
         } else {
             // TODO: Catch exception
-            return CarrierEthernetVirtualConnection.Type.fromString(argEvcType);
+            return CarrierEthernetVirtualConnection.Type.valueOf(argEvcType);
         }
     }
 
@@ -123,7 +123,7 @@
             } else {
                 // TODO: Catch exception
                 CarrierEthernetVirtualConnection.Type evcType =
-                        CarrierEthernetVirtualConnection.Type.fromString(argEvcType);
+                        CarrierEthernetVirtualConnection.Type.valueOf(argEvcType);
                 return (evcType.equals(CarrierEthernetVirtualConnection.Type.POINT_TO_POINT) ? 2 :
                         CarrierEthernetVirtualConnection.MAX_NUM_UNI);
             }
diff --git a/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/commands/CarrierEthernetCreateFcCommand.java b/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/commands/CarrierEthernetCreateFcCommand.java
index 2b42195..9a9075d 100644
--- a/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/commands/CarrierEthernetCreateFcCommand.java
+++ b/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/commands/CarrierEthernetCreateFcCommand.java
@@ -103,7 +103,7 @@
                     CarrierEthernetVirtualConnection.Type.POINT_TO_POINT);
         } else {
             // TODO: Catch exception
-            return CarrierEthernetVirtualConnection.Type.fromString(argEvcType);
+            return CarrierEthernetVirtualConnection.Type.valueOf(argEvcType);
         }
     }
 
diff --git a/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/completers/CarrierEthernetEvcTypeCompleter.java b/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/completers/CarrierEthernetEvcTypeCompleter.java
index f5bdd98..79da333 100644
--- a/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/completers/CarrierEthernetEvcTypeCompleter.java
+++ b/ecord/carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/cli/completers/CarrierEthernetEvcTypeCompleter.java
@@ -31,7 +31,7 @@
         SortedSet<String> strings = delegate.getStrings();
 
         for (CarrierEthernetVirtualConnection.Type type : CarrierEthernetVirtualConnection.Type.values()) {
-            strings.add(type.toString());
+            strings.add(type.name());
         }
 
         return delegate.complete(buffer, cursor, candidates);
