diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
index 213375a..9c55df3 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
@@ -120,13 +120,13 @@
             .disableInBand()
             .build();
 
-    private static final PortDescription PATCH_ROUT = new DefaultPortDescription(
-            PortNumber.portNumber(1),
-            true,
-            DefaultAnnotations.builder()
+    private static final PortDescription PATCH_ROUT = DefaultPortDescription.builder()
+            .withPortNumber(PortNumber.portNumber(1))
+            .isEnabled(true)
+            .annotations(DefaultAnnotations.builder()
                     .set(PORT_NAME, PATCH_ROUT_BRIDGE)
-                    .build()
-    );
+                    .build())
+            .build();
 
     private static final String COMPUTE_1_HOSTNAME = "compute_1";
     private static final String COMPUTE_2_HOSTNAME = "compute_2";
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/config/OpticalPortOperator.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/config/OpticalPortOperator.java
index a6b918c..aad6d58 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/config/OpticalPortOperator.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/config/OpticalPortOperator.java
@@ -134,7 +134,7 @@
             return descr;
         }
         return DefaultPortDescription.builder(descr)
-                .withPortNumer(port)
+                .withPortNumber(port)
                 .annotations(sa)
                 .build();
     }
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java
index 5faa1c5..0578858 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java
@@ -100,7 +100,9 @@
 
         DefaultAnnotations annotations = builder.build();
         long portSpeed = signalType.bitRate();
-        return new DefaultPortDescription(number, isEnabled, Port.Type.OCH, portSpeed, annotations);
+        return DefaultPortDescription.builder().withPortNumber(number).isEnabled(isEnabled)
+                .type(Port.Type.OCH).portSpeed(portSpeed).annotations(annotations)
+                .build();
     }
 
     /**
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java
index 51c442f..9dd48cb 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java
@@ -82,11 +82,13 @@
         builder.set(SIGNAL_TYPE, signalType.toString());
 
         long portSpeed = signalType.bitRate();
-        return new DefaultPortDescription(number,
-                                          isEnabled,
-                                          Port.Type.ODUCLT,
-                                          portSpeed,
-                                          builder.build());
+        return DefaultPortDescription.builder()
+                .withPortNumber(number)
+                .isEnabled(isEnabled)
+                .type(Port.Type.ODUCLT)
+                .portSpeed(portSpeed)
+                .annotations(builder.build())
+                .build();
     }
 
     /**
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java
index aee89dd..7b9dcd8 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java
@@ -70,7 +70,13 @@
         builder.set(OpticalAnnotations.GRID_HZ, String.valueOf(grid.asHz()));
 
         long portSpeed = 0;
-        return new DefaultPortDescription(number, isEnabled, Port.Type.OMS, portSpeed, builder.build());
+        return DefaultPortDescription.builder()
+                .withPortNumber(number)
+                .isEnabled(isEnabled)
+                .type(Port.Type.OMS)
+                .portSpeed(portSpeed)
+                .annotations(builder.build())
+                .build();
     }
 
     /**
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java
index 8043f33..60b32e2 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java
@@ -82,11 +82,13 @@
         builder.set(SIGNAL_TYPE, signalType.toString());
 
         long portSpeed = 0; // TODO specify appropriate value?
-        return new DefaultPortDescription(number,
-                                          isEnabled,
-                                          Port.Type.OTU,
-                                          portSpeed,
-                                          builder.build());
+        return DefaultPortDescription.builder()
+                .withPortNumber(number)
+                .isEnabled(isEnabled)
+                .type(Port.Type.OTU)
+                .portSpeed(portSpeed)
+                .annotations(builder.build())
+                .build();
     }
 
     /**
