diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationEnumsProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationEnumsProtoTranslator.java
index d82f93e..6fe0319 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationEnumsProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationEnumsProtoTranslator.java
@@ -59,7 +59,7 @@
      * @param roleProto gRPC message
      * @return {@link ApplicationRole}
      */
-    public static Optional<Object> translate(ApplicationRoleProto roleProto) {
+    public static Optional<ApplicationRole> translate(ApplicationRoleProto roleProto) {
 
         switch (roleProto) {
             case USER:
@@ -101,7 +101,7 @@
      * @param stateProto gRPC message
      * @return {@link ApplicationState}
      */
-    public static Optional<Object> translate(ApplicationStateProto stateProto) {
+    public static Optional<ApplicationState> translate(ApplicationStateProto stateProto) {
 
         switch (stateProto) {
             case ACTIVE:
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java
index 568be18..25a95e4 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java
@@ -17,7 +17,6 @@
 
 import com.google.common.collect.Sets;
 import org.onosproject.core.Application;
-import org.onosproject.core.ApplicationRole;
 import org.onosproject.core.DefaultApplication;
 import org.onosproject.grpc.core.models.ApplicationProtoOuterClass.ApplicationProto;
 import org.onosproject.incubator.protobuf.models.security.PermissionProtoTranslator;
@@ -57,7 +56,7 @@
                 .withUrl(app.getUrl())
                 .withReadme(app.getReadme())
                 .withIcon(app.toByteArray())
-                .withRole((ApplicationRole) ApplicationEnumsProtoTranslator.translate(app.getRole()).get())
+                .withRole(ApplicationEnumsProtoTranslator.translate(app.getRole()).get())
                 .withPermissions(permissions)
                 .withFeatures(app.getFeaturesList())
                 .withFeaturesRepo(Optional.empty()) // TODO: need to add features repo
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/RegionProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/RegionProtoTranslator.java
index bd43c0b..7512ebf 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/RegionProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/RegionProtoTranslator.java
@@ -76,9 +76,8 @@
                                        .stream()
                                        .map(s -> RegionProtoOuterClass.RegionProto.NodeIdSet
                                                .newBuilder()
-                                               .addAllNodeId(s.stream().map(id -> {
-                                                   return id.toString();
-                                               }).collect(Collectors.toList()))
+                                               .addAllNodeId(s.stream().map(id ->
+                                                       id.toString()).collect(Collectors.toList()))
                                                .build())
                                        .collect(Collectors.toList()))
                 .build();
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/device/PortProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/device/PortProtoTranslator.java
index 046cedf..ff39987 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/device/PortProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/device/PortProtoTranslator.java
@@ -30,6 +30,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Optional;
+
 /**
  * gRPC message conversion related utilities for port service.
  */
@@ -46,7 +48,7 @@
     public static PortDescription translate(PortDescriptionProto portDescription) {
         PortNumber number = PortNumber.fromString(portDescription.getPortNumber());
         boolean isEnabled = portDescription.getIsEnabled();
-        Port.Type type = translate(portDescription.getType());
+        Port.Type type = translate(portDescription.getType()).get();
         long portSpeed = portDescription.getPortSpeed();
         SparseAnnotations annotations = AnnotationsTranslator.asAnnotations(portDescription.getAnnotationsMap());
         // TODO How to deal with more specific Port...
@@ -77,27 +79,26 @@
      * @param type      gRPC message
      * @return  {@link Port.Type}
      */
-    public static Port.Type translate(PortEnumsProto.PortTypeProto type) {
+    public static Optional<Port.Type> translate(PortEnumsProto.PortTypeProto type) {
         switch (type) {
             case COPPER:
-                return Port.Type.COPPER;
+                return Optional.of(Port.Type.COPPER);
             case FIBER:
-                return Port.Type.FIBER;
+                return Optional.of(Port.Type.FIBER);
             case OCH:
-                return Port.Type.OCH;
+                return Optional.of(Port.Type.OCH);
             case ODUCLT:
-                return Port.Type.ODUCLT;
+                return Optional.of(Port.Type.ODUCLT);
             case OMS:
-                return Port.Type.OMS;
+                return Optional.of(Port.Type.OMS);
             case PACKET:
-                return Port.Type.PACKET;
+                return Optional.of(Port.Type.PACKET);
             case VIRTUAL_PORT:
-                return Port.Type.VIRTUAL;
+                return Optional.of(Port.Type.VIRTUAL);
 
-            case UNRECOGNIZED:
             default:
                 log.warn("Unexpected PortType: {}", type);
-                return Port.Type.COPPER;
+                return Optional.empty();
         }
     }
 
@@ -126,7 +127,7 @@
 
             default:
                 log.warn("Unexpected Port.Type: {}", type);
-                return PortEnumsProto.PortTypeProto.COPPER;
+                return PortEnumsProto.PortTypeProto.UNRECOGNIZED;
         }
     }
 
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryEnumsProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryEnumsProtoTranslator.java
index 2c7d51e..f6c590b 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryEnumsProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryEnumsProtoTranslator.java
@@ -63,7 +63,7 @@
      * @param flowEntryState gRPC message
      * @return {@link FlowEntryState}
      */
-    public static Optional<Object> translate(FlowEntryEnumsProto.FlowEntryStateProto flowEntryState) {
+    public static Optional<FlowEntryState> translate(FlowEntryEnumsProto.FlowEntryStateProto flowEntryState) {
 
         switch (flowEntryState) {
             case PENDING_ADD:
@@ -115,7 +115,7 @@
      * @param flowLiveType gRPC message
      * @return {@link FlowLiveType}
      */
-    public static Optional<Object> translate(FlowEntryEnumsProto.FlowLiveTypeProto flowLiveType) {
+    public static Optional<FlowLiveType> translate(FlowEntryEnumsProto.FlowLiveTypeProto flowLiveType) {
 
         switch (flowLiveType) {
             case IMMEDIATE:
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryProtoTranslator.java
index dfbbdf8..80ec629 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryProtoTranslator.java
@@ -63,9 +63,9 @@
             return null;
         }
 
-        FlowEntry.FlowEntryState state = (FlowEntry.FlowEntryState)
+        FlowEntry.FlowEntryState state =
                 FlowEntryEnumsProtoTranslator.translate(flowEntry.getState()).get();
-        FlowEntry.FlowLiveType liveType = (FlowEntry.FlowLiveType)
+        FlowEntry.FlowLiveType liveType =
                 FlowEntryEnumsProtoTranslator.translate(flowEntry.getLiveType()).get();
 
         // TODO: need to instantiate FlowRule later
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleEnumsProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleEnumsProtoTranslator.java
index dcb2038..12ddf29 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleEnumsProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleEnumsProtoTranslator.java
@@ -64,7 +64,7 @@
      * @param flowRemoveReason gRPC message
      * @return {@link FlowRemoveReason}
      */
-    public static Optional<Object> translate(FlowRuleEnumsProto.FlowRemoveReasonProto flowRemoveReason) {
+    public static Optional<FlowRemoveReason> translate(FlowRuleEnumsProto.FlowRemoveReasonProto flowRemoveReason) {
 
         switch (flowRemoveReason) {
             case DELETE:
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleProtoTranslator.java
index 2babd83..76046e7 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleProtoTranslator.java
@@ -71,7 +71,7 @@
 
         // TODO: to register AppId need to find a way to get CoreService
 
-        FlowRule.FlowRemoveReason reason = (FlowRule.FlowRemoveReason)
+        FlowRule.FlowRemoveReason reason =
                 FlowRuleEnumsProtoTranslator.translate(flowRule.getReason()).get();
 
         FlowRule.Builder resultBuilder = new DefaultFlowRule.Builder();
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/BandEnumsProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/BandEnumsProtoTranslator.java
index b607e1a..f0825fb 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/BandEnumsProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/BandEnumsProtoTranslator.java
@@ -35,7 +35,7 @@
      * @param bandType BandType in gRPC enum
      * @return equivalent in ONOS enum
      */
-    public static Optional<Object> translate(BandEnumsProto.BandTypeProto bandType) {
+    public static Optional<Band.Type> translate(BandEnumsProto.BandTypeProto bandType) {
         switch (bandType) {
             case DROP:
                 return Optional.of(Band.Type.DROP);
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/BandProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/BandProtoTranslator.java
index c5448f1..ba4460d 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/BandProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/BandProtoTranslator.java
@@ -40,7 +40,7 @@
      * @return {@link Band}
      */
     public static Band translate(BandProto gBand) {
-        Band.Type type = (Band.Type) BandEnumsProtoTranslator.translate(gBand.getType()).get();
+        Band.Type type = BandEnumsProtoTranslator.translate(gBand.getType()).get();
         long rate = gBand.getRate();
         long burstSize = gBand.getBurst();
         short prec = (short) gBand.getDropPrecedence();
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterEnumsProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterEnumsProtoTranslator.java
index 6b7fb3e..b73117c 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterEnumsProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterEnumsProtoTranslator.java
@@ -36,7 +36,7 @@
      * @param unit meterUnit in gRPC enum
      * @return equivalent in ONOS enum
      */
-    public static Optional<Object> translate(MeterEnumsProto.MeterUnitProto unit) {
+    public static Optional<Meter.Unit> translate(MeterEnumsProto.MeterUnitProto unit) {
         switch (unit) {
             case PKTS_PER_SEC:
                 return Optional.of(Meter.Unit.PKTS_PER_SEC);
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterRequestProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterRequestProtoTranslator.java
index e63f35e..dd6c5fb 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterRequestProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterRequestProtoTranslator.java
@@ -67,7 +67,7 @@
 
         DeviceId deviceid = DeviceId.deviceId(meterRequest.getDeviceId());
         ApplicationId appId = ApplicationIdProtoTranslator.translate(meterRequest.getApplicationId());
-        Meter.Unit unit = (Meter.Unit) MeterEnumsProtoTranslator.translate(meterRequest.getUnit()).get();
+        Meter.Unit unit = MeterEnumsProtoTranslator.translate(meterRequest.getUnit()).get();
         boolean burst = meterRequest.getIsBurst();
         Collection<Band> bands = BandProtoTranslator.translate(meterRequest.getBandsList());
         MeterRequest.Type type = (MeterRequest.Type) translate(meterRequest.getType()).get();
