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();
     }
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java b/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
index 2354fce..57fdbe2 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
@@ -44,7 +44,10 @@
      * @param number      port number
      * @param isEnabled   port enabled state
      * @param annotations optional key/value annotations map
+     *
+     * @deprecated in 1.13.0 use {@link #builder()} instead
      */
+    @Deprecated
     public DefaultPortDescription(PortNumber number, boolean isEnabled,
                                   SparseAnnotations... annotations) {
         this(number, isEnabled, Type.COPPER, DEFAULT_SPEED, annotations);
@@ -58,7 +61,9 @@
      * @param type        port type
      * @param portSpeed   port speed in Mbps
      * @param annotations optional key/value annotations map
+     * @deprecated in 1.13.0 use {@link #builder()} instead
      */
+    @Deprecated
     public DefaultPortDescription(PortNumber number, boolean isEnabled,
                                   Type type, long portSpeed,
                                   SparseAnnotations...annotations) {
@@ -74,7 +79,9 @@
      * @param type        port type
      * @param portSpeed   port speed in Mbps
      * @param annotations optional key/value annotations map
+     * @deprecated in 1.13.0 use {@link #builder()} instead
      */
+    @Deprecated // to be made non-public
     public DefaultPortDescription(PortNumber number, boolean isEnabled, boolean isRemoved,
                                   Type type, long portSpeed,
                                   SparseAnnotations...annotations) {
@@ -100,7 +107,10 @@
      *
      * @param base        PortDescription to get basic information from
      * @param annotations optional key/value annotations map
+     *
+     * @deprecated in 1.13.0 use {@link #builder(PortDescription)} instead.
      */
+    @Deprecated
     public DefaultPortDescription(PortDescription base,
                                   SparseAnnotations annotations) {
         this(base.portNumber(), base.isEnabled(), base.isRemoved(), base.type(), base.portSpeed(),
@@ -114,10 +124,15 @@
      * @param annotations to be used in the copied description.
      *        Note: Annotations on {@code base} will be ignored.
      * @return copied port description
+     *
+     * @deprecated in 1.13.0 use {@link #builder(PortDescription)} instead.
      */
+    @Deprecated
     public static DefaultPortDescription copyReplacingAnnotation(PortDescription base,
                                                                  SparseAnnotations annotations) {
-        return new DefaultPortDescription(base, annotations);
+        return DefaultPortDescription.builder(base)
+                .annotations(annotations)
+                .build();
     }
 
     @Override
@@ -222,8 +237,22 @@
          *
          * @param number to set
          * @return self
+         *
+         * @deprecated in 1.13.0 use withPortNumber() instead.
          */
+
+        @Deprecated
         public Builder withPortNumer(PortNumber number) {
+            return withPortNumber(number);
+        }
+
+        /**
+         * Sets mandatory field PortNumber.
+         *
+         * @param number to set
+         * @return self
+         */
+        public Builder withPortNumber(PortNumber number) {
             this.number = checkNotNull(number);
             return this;
         }
diff --git a/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java b/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java
index 1d15b20..9fa3893 100644
--- a/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java
+++ b/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java
@@ -33,15 +33,17 @@
     private static PortNumber port1 = PortNumber.portNumber(1);
     private static long portSpeed1 = 111L;
     private static DefaultPortDescription portDescription1 =
-            new DefaultPortDescription(port1, true, COPPER, portSpeed1);
+            DefaultPortDescription.builder().withPortNumber(port1).isEnabled(true)
+                    .type(COPPER).portSpeed(portSpeed1).build();
 
     private static DefaultPortDescription sameAsPortDescription1 =
-            new DefaultPortDescription(portDescription1,
-                                       portDescription1.annotations());
+            DefaultPortDescription.builder(portDescription1)
+                            .annotations(portDescription1.annotations())
+                            .build();
 
     private static PortNumber port2 = PortNumber.portNumber(2);
     private static DefaultPortDescription portDescription2 =
-            new DefaultPortDescription(port2, true);
+            DefaultPortDescription.builder().withPortNumber(port2).isEnabled(true).build();
 
     private static DefaultPortDescription portDescription3 =
             new DefaultPortDescription();
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
index 5a41057..f4a7836 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
@@ -725,7 +725,9 @@
             if (oldOne != null) {
                 SparseAnnotations merged = union(oldOne.annotations(),
                                                  newDesc.annotations());
-                newOne = new DefaultPortDescription(newOne, merged);
+                newOne = DefaultPortDescription.builder(newOne)
+                            .annotations(merged)
+                            .build();
             }
             return portDescs.put(newOne.portNumber(), newOne);
         }
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java
index 595280a..719307f 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java
@@ -282,8 +282,8 @@
     public final void testUpdatePorts() {
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
 
         List<DeviceEvent> events = deviceStore.updatePorts(PID, DID1, pds);
@@ -300,9 +300,9 @@
 
 
         List<PortDescription> pds2 = Arrays.asList(
-                new DefaultPortDescription(P1, false),
-                new DefaultPortDescription(P2, true),
-                new DefaultPortDescription(P3, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P3).isEnabled(true).build()
                 );
 
         events = deviceStore.updatePorts(PID, DID1, pds2);
@@ -325,8 +325,8 @@
         }
 
         List<PortDescription> pds3 = Arrays.asList(
-                new DefaultPortDescription(P1, false),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         events = deviceStore.updatePorts(PID, DID1, pds3);
         assertFalse("event should be triggered", events.isEmpty());
@@ -351,12 +351,12 @@
     public final void testUpdatePortStatus() {
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
         DeviceEvent event = deviceStore.updatePortStatus(PID, DID1,
-                new DefaultPortDescription(P1, false));
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build());
         assertEquals(PORT_UPDATED, event.type());
         assertDevice(DID1, SW1, event.subject());
         assertEquals(P1, event.port().number());
@@ -369,12 +369,12 @@
         putDeviceAncillary(DID1, SW1);
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true, A1)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A1).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
         DeviceEvent event = deviceStore.updatePortStatus(PID, DID1,
-                new DefaultPortDescription(P1, false, A1_2));
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).annotations(A1_2).build());
         assertEquals(PORT_UPDATED, event.type());
         assertDevice(DID1, SW1, event.subject());
         assertEquals(P1, event.port().number());
@@ -382,12 +382,12 @@
         assertFalse("Port is disabled", event.port().isEnabled());
 
         DeviceEvent event2 = deviceStore.updatePortStatus(PIDA, DID1,
-                new DefaultPortDescription(P1, true));
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build());
         assertNull("Ancillary is ignored if primary exists", event2);
 
         // but, Ancillary annotation update will be notified
         DeviceEvent event3 = deviceStore.updatePortStatus(PIDA, DID1,
-                new DefaultPortDescription(P1, true, A2));
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A2).build());
         assertEquals(PORT_UPDATED, event3.type());
         assertDevice(DID1, SW1, event3.subject());
         assertEquals(P1, event3.port().number());
@@ -396,7 +396,7 @@
 
         // port only reported from Ancillary will be notified as down
         DeviceEvent event4 = deviceStore.updatePortStatus(PIDA, DID1,
-                new DefaultPortDescription(P2, true));
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build());
         assertEquals(PORT_ADDED, event4.type());
         assertDevice(DID1, SW1, event4.subject());
         assertEquals(P2, event4.port().number());
@@ -410,8 +410,8 @@
         putDevice(DID1, SW1);
         putDevice(DID2, SW1);
         List<PortDescription> pds = Arrays.<PortDescription>asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -433,8 +433,8 @@
         putDevice(DID1, SW1);
         putDevice(DID2, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, false)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(false).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -454,7 +454,7 @@
     public final void testRemoveDevice() {
         putDevice(DID1, SW1, A1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true, A2)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A2).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
         putDevice(DID2, SW1);
@@ -474,7 +474,7 @@
         // putBack Device, Port w/o annotation
         putDevice(DID1, SW1);
         List<PortDescription> pds2 = Arrays.asList(
-                new DefaultPortDescription(P1, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds2);
 
diff --git a/core/net/src/main/java/org/onosproject/net/config/impl/DeviceInjectionConfigMonitor.java b/core/net/src/main/java/org/onosproject/net/config/impl/DeviceInjectionConfigMonitor.java
index 78b6c9e..5277075 100644
--- a/core/net/src/main/java/org/onosproject/net/config/impl/DeviceInjectionConfigMonitor.java
+++ b/core/net/src/main/java/org/onosproject/net/config/impl/DeviceInjectionConfigMonitor.java
@@ -189,7 +189,7 @@
                 // TODO inject port details if something like BasicPortConfig was created
                 PortNumber number = portNumber(i);
                 boolean isEnabled = true;
-                portDescs.add(new DefaultPortDescription(number, isEnabled));
+                portDescs.add(DefaultPortDescription.builder().withPortNumber(number) .isEnabled(isEnabled).build());
             }
             providerService.updatePorts(did, portDescs);
         }
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index 37fc2cd..c82c1f5 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -716,12 +716,10 @@
                 log.trace("Device not found: {}", deviceId);
             }
 
-            PortDescription newPortDescription = new DefaultPortDescription(basePortDescription.portNumber(),
-                                                                            basePortDescription.isEnabled(),
-                                                                            true,
-                                                                            basePortDescription.type(),
-                                                                            basePortDescription.portSpeed(),
-                                                                            basePortDescription.annotations());
+            PortDescription newPortDescription = DefaultPortDescription.builder(basePortDescription)
+                .isRemoved(true)
+                .build();
+
             final DeviceEvent event = store.updatePortStatus(this.provider().id(),
                                                              deviceId,
                                                              newPortDescription);
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java b/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java
index 2489f79..ac9ea84 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java
@@ -71,7 +71,9 @@
         builder.putAll(descr.annotations());
         builder.putAll(annotations);
 
-        return DefaultPortDescription.copyReplacingAnnotation(descr, builder.build());
+        return DefaultPortDescription.builder(descr)
+                    .annotations(builder.build())
+                    .build();
     }
 
 }
diff --git a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java
index 975c90a..601e6c3 100644
--- a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java
@@ -190,15 +190,15 @@
     public void updatePorts() {
         connectDevice(DID1, SW1);
         List<PortDescription> pds = new ArrayList<>();
-        pds.add(new DefaultPortDescription(P1, true));
-        pds.add(new DefaultPortDescription(P2, true));
-        pds.add(new DefaultPortDescription(P3, true));
+        pds.add(DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P3).isEnabled(true).build());
         providerService.updatePorts(DID1, pds);
         validateEvents(DEVICE_ADDED, PORT_ADDED, PORT_ADDED, PORT_ADDED);
         pds.clear();
 
-        pds.add(new DefaultPortDescription(P1, false));
-        pds.add(new DefaultPortDescription(P3, true));
+        pds.add(DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P3).isEnabled(true).build());
         providerService.updatePorts(DID1, pds);
         validateEvents(PORT_UPDATED, PORT_REMOVED);
     }
@@ -207,14 +207,16 @@
     public void updatePortStatus() {
         connectDevice(DID1, SW1);
         List<PortDescription> pds = new ArrayList<>();
-        pds.add(new DefaultPortDescription(P1, true));
-        pds.add(new DefaultPortDescription(P2, true));
+        pds.add(DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build());
         providerService.updatePorts(DID1, pds);
         validateEvents(DEVICE_ADDED, PORT_ADDED, PORT_ADDED);
 
-        providerService.portStatusChanged(DID1, new DefaultPortDescription(P1, false));
+        providerService.portStatusChanged(DID1, DefaultPortDescription.builder()
+                .withPortNumber(P1).isEnabled(false).build());
         validateEvents(PORT_UPDATED);
-        providerService.portStatusChanged(DID1, new DefaultPortDescription(P1, false));
+        providerService.portStatusChanged(DID1, DefaultPortDescription.builder()
+                .withPortNumber(P1).isEnabled(false).build());
         assertTrue("no events expected", listener.events.isEmpty());
     }
 
@@ -222,8 +224,8 @@
     public void getPorts() {
         connectDevice(DID1, SW1);
         List<PortDescription> pds = new ArrayList<>();
-        pds.add(new DefaultPortDescription(P1, true));
-        pds.add(new DefaultPortDescription(P2, true));
+        pds.add(DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build());
         providerService.updatePorts(DID1, pds);
         validateEvents(DEVICE_ADDED, PORT_ADDED, PORT_ADDED);
         assertEquals("wrong port count", 2, service.getPorts(DID1).size());
diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java
index 301767d..f14b062 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java
@@ -97,7 +97,9 @@
             SparseAnnotations merged = union(oldOne.value().annotations(),
                                              newDesc.value().annotations());
             newOne = new Timestamped<>(
-                            new DefaultPortDescription(newDesc.value(), merged),
+                            DefaultPortDescription.builder(newDesc.value())
+                                .annotations(merged)
+                                .build(),
                             newDesc.timestamp());
         }
         portDescs.put(newOne.value().portNumber(), newOne);
diff --git a/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
index 370c1d5..8a31446 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
@@ -522,8 +522,8 @@
     public final void testUpdatePorts() {
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         Capture<InternalDeviceEvent> message = new Capture<>();
         Capture<MessageSubject> subject = new Capture<>();
@@ -547,9 +547,9 @@
 
 
         List<PortDescription> pds2 = Arrays.asList(
-                new DefaultPortDescription(P1, false),
-                new DefaultPortDescription(P2, true),
-                new DefaultPortDescription(P3, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P3).isEnabled(true).build()
                 );
 
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
@@ -577,8 +577,8 @@
         }
 
         List<PortDescription> pds3 = Arrays.asList(
-                new DefaultPortDescription(P1, false),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
         events = deviceStore.updatePorts(PID, DID1, pds3);
@@ -607,7 +607,7 @@
     public final void testUpdatePortStatus() {
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -616,7 +616,8 @@
         Capture<Function<InternalPortStatusEvent, byte[]>> encoder = new Capture<>();
 
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
-        final DefaultPortDescription desc = new DefaultPortDescription(P1, false);
+        final DefaultPortDescription desc = DefaultPortDescription.builder().withPortNumber(P1)
+                .isEnabled(false).build();
         DeviceEvent event = deviceStore.updatePortStatus(PID, DID1, desc);
         assertEquals(PORT_UPDATED, event.type());
         assertDevice(DID1, SW1, event.subject());
@@ -632,7 +633,7 @@
         putDeviceAncillary(DID1, SW1);
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true, A1)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A1).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -643,7 +644,9 @@
         // update port from primary
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
 
-        final DefaultPortDescription desc1 = new DefaultPortDescription(P1, false, A1_2);
+        final DefaultPortDescription desc1 = DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false)
+                .annotations(A1_2).build();
+
         DeviceEvent event = deviceStore.updatePortStatus(PID, DID1, desc1);
         assertEquals(PORT_UPDATED, event.type());
         assertDevice(DID1, SW1, event.subject());
@@ -656,7 +659,8 @@
 
         // update port from ancillary with no attributes
         resetCommunicatorExpectingNoBroadcast(message, subject, encoder);
-        final DefaultPortDescription desc2 = new DefaultPortDescription(P1, true);
+        final DefaultPortDescription desc2 = DefaultPortDescription.builder()
+                .withPortNumber(P1).isEnabled(true).build();
         DeviceEvent event2 = deviceStore.updatePortStatus(PIDA, DID1, desc2);
         assertNull("Ancillary is ignored if primary exists", event2);
         verify(clusterCommunicator);
@@ -664,7 +668,8 @@
 
         // but, Ancillary annotation update will be notified
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
-        final DefaultPortDescription desc3 = new DefaultPortDescription(P1, true, A2);
+        final DefaultPortDescription desc3 = DefaultPortDescription.builder().withPortNumber(P1)
+                .isEnabled(true).annotations(A2).build();
         DeviceEvent event3 = deviceStore.updatePortStatus(PIDA, DID1, desc3);
         assertEquals(PORT_UPDATED, event3.type());
         assertDevice(DID1, SW1, event3.subject());
@@ -677,7 +682,8 @@
 
         // port only reported from Ancillary will be notified as down
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
-        final DefaultPortDescription desc4 = new DefaultPortDescription(P2, true);
+        final DefaultPortDescription desc4 = DefaultPortDescription.builder()
+                .withPortNumber(P2).isEnabled(true).build();
         DeviceEvent event4 = deviceStore.updatePortStatus(PIDA, DID1, desc4);
         assertEquals(PORT_ADDED, event4.type());
         assertDevice(DID1, SW1, event4.subject());
@@ -757,8 +763,8 @@
         putDevice(DID1, SW1);
         putDevice(DID2, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -780,8 +786,8 @@
         putDevice(DID1, SW1);
         putDevice(DID2, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, false)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(false).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -801,7 +807,7 @@
     public final void testRemoveDevice() {
         putDevice(DID1, SW1, A1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true, A2)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A2).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
         putDevice(DID2, SW1);
@@ -830,7 +836,7 @@
         // putBack Device, Port w/o annotation
         putDevice(DID1, SW1);
         List<PortDescription> pds2 = Arrays.asList(
-                new DefaultPortDescription(P1, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds2);
 
diff --git a/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java b/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
index 5a21de0..5b0b257 100644
--- a/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
+++ b/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
@@ -128,9 +128,13 @@
                         .set(INTERFACE_TYPE, interfaceNode.path(INTERFACE_TYPE).asText())
                         .build();
 
-                PortDescription portDescription = new DefaultPortDescription(PortNumber
-                        .portNumber(getPortNumber(name)),
-                        true, Port.Type.FIBER, bandwidth, annotations);
+                PortDescription portDescription = DefaultPortDescription.builder()
+                        .withPortNumber(PortNumber.portNumber(getPortNumber(name)))
+                        .isEnabled(true)
+                        .type(Port.Type.FIBER)
+                        .portSpeed(bandwidth)
+                        .annotations(annotations)
+                        .build();
                 ports.add(portDescription);
 
             });
diff --git a/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
index a4a68ec..1da7ad0 100644
--- a/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
+++ b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
@@ -185,8 +185,13 @@
         long portSpeed = getPortSpeed(textStr);
         DefaultAnnotations.Builder annotations = DefaultAnnotations.builder()
                 .set(AnnotationKeys.PORT_NAME, firstWord);
-        return "-1".equals(port) ? null : new DefaultPortDescription(PortNumber.portNumber(port),
-                                                                     isEnabled, type, portSpeed, annotations.build());
+        return "-1".equals(port) ? null : DefaultPortDescription.builder()
+                .withPortNumber(PortNumber.portNumber(port))
+                .isEnabled(isEnabled)
+                .type(type)
+                .portSpeed(portSpeed)
+                .annotations(annotations.build())
+                .build();
     }
 
     /**
@@ -295,4 +300,4 @@
         return portSpeed;
     }
 
-}
\ No newline at end of file
+}
diff --git a/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java b/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java
index 39bd2e9..5b9bf92 100644
--- a/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java
+++ b/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java
@@ -118,18 +118,24 @@
                 .set(AnnotationKeys.PORT_NAME, INTF6_NAME);
 
         List<PortDescription> intfs = new ArrayList<>();
-        intfs.add(new DefaultPortDescription(INTF1_PORT, IS_ENABLED, COPPER, CONNECTION_SPEED_ETHERNET,
-                                             int1Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF2_PORT, IS_NOT_ENABLED, COPPER, CONNECTION_SPEED_ETHERNET,
-                                             int2Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF3_PORT, IS_NOT_ENABLED, COPPER, CONNECTION_SPEED_ETHERNET,
-                                             int3Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF4_PORT, IS_ENABLED, COPPER, CONNECTION_SPEED_SERIAL,
-                                             int4Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF5_PORT, IS_ENABLED, FIBER, CONNECTION_SPEED_POS,
-                                             int5Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF6_PORT, IS_ENABLED, FIBER, CONNECTION_SPEED_FDDI,
-                                             int6Annotations.build()));
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF1_PORT).isEnabled(IS_ENABLED)
+                .type(COPPER).portSpeed(CONNECTION_SPEED_ETHERNET)
+                .annotations(int1Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF2_PORT).isEnabled(IS_NOT_ENABLED)
+                .type(COPPER).portSpeed(CONNECTION_SPEED_ETHERNET)
+                .annotations(int2Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF3_PORT).isEnabled(IS_NOT_ENABLED)
+                .type(COPPER).portSpeed(CONNECTION_SPEED_ETHERNET)
+                .annotations(int3Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF4_PORT).isEnabled(IS_ENABLED)
+                .type(COPPER).portSpeed(CONNECTION_SPEED_SERIAL)
+                .annotations(int4Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF5_PORT).isEnabled(IS_ENABLED)
+                .type(FIBER).portSpeed(CONNECTION_SPEED_POS)
+                .annotations(int5Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF6_PORT).isEnabled(IS_ENABLED)
+                .type(FIBER).portSpeed(CONNECTION_SPEED_FDDI)
+                .annotations(int6Annotations.build()).build());
         return intfs;
     }
 
diff --git a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java
index 04a7132..63cd839 100644
--- a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java
+++ b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java
@@ -136,8 +136,11 @@
                         long portSpeed = itf.get(ETH_BW).asLong() / ONE_THOUSAND; //in Mbps
                         DefaultAnnotations.Builder annotations = DefaultAnnotations.builder()
                                 .set(AnnotationKeys.PORT_NAME, ifName);
-                        PortDescription desc = new DefaultPortDescription(PortNumber.portNumber(ifNum), state,
-                                Port.Type.FIBER, portSpeed, annotations.build());
+                        PortDescription desc = DefaultPortDescription.builder()
+                                .withPortNumber(PortNumber.portNumber(ifNum))
+                                .isEnabled(state)
+                                .type(Port.Type.FIBER).portSpeed(portSpeed).annotations(annotations.build())
+                                .build();
                         ports.add(desc);
                     }
                 });
diff --git a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/GnmiDeviceDescriptionDiscovery.java b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/GnmiDeviceDescriptionDiscovery.java
index eeaf2ab..93083c5 100644
--- a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/GnmiDeviceDescriptionDiscovery.java
+++ b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/GnmiDeviceDescriptionDiscovery.java
@@ -257,7 +257,7 @@
                 int number = Character.getNumericValue(portId.charAt(portId.length() - 1));
                 PortNumber portNumber = PortNumber.portNumber(number, portId);
                 ports.put(portId, DefaultPortDescription.builder()
-                        .withPortNumer(portNumber));
+                        .withPortNumber(portNumber));
             }
             if (name.equals("enabled")) {
                 DefaultPortDescription.Builder builder = ports.get(portId);
diff --git a/drivers/huawei/src/main/java/org/onosproject/drivers/huawei/HuaweiXmlParser.java b/drivers/huawei/src/main/java/org/onosproject/drivers/huawei/HuaweiXmlParser.java
index 111d1a9..fba0f75 100644
--- a/drivers/huawei/src/main/java/org/onosproject/drivers/huawei/HuaweiXmlParser.java
+++ b/drivers/huawei/src/main/java/org/onosproject/drivers/huawei/HuaweiXmlParser.java
@@ -182,9 +182,13 @@
 
             DefaultAnnotations annotations = DefaultAnnotations.builder()
                     .set(PORT_NAME, ifName).build();
-            ports.add(new DefaultPortDescription(portNumber(port), isEnabled,
-                                                 COPPER, portSpeed,
-                                                 annotations));
+            ports.add(DefaultPortDescription.builder()
+                      .withPortNumber(portNumber(port))
+                      .isEnabled(isEnabled)
+                      .type(COPPER)
+                      .portSpeed(portSpeed)
+                      .annotations(annotations)
+                      .build());
         }
     }
 
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
index d4c709e..4dae93b 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
@@ -347,11 +347,12 @@
 
         long portSpeed = toMbps(phyIntf.getString(SPEED));
 
-        portDescriptions.add(new DefaultPortDescription(portNumber,
-                                                        admUp && opUp,
-                                                        Type.COPPER,
-                                                        portSpeed,
-                                                        annotations.build()));
+        portDescriptions.add(DefaultPortDescription.builder()
+                .withPortNumber(portNumber)
+                .isEnabled(admUp && opUp)
+                .type(Type.COPPER)
+                .portSpeed(portSpeed)
+                .annotations(annotations.build()).build());
 
         // parse each logical Interface
         for (HierarchicalConfiguration logIntf : phyIntf.configurationsAt("logical-interface")) {
@@ -394,11 +395,12 @@
             // it seemed all logical loop-back interfaces were down
             boolean lEnabled = logIntf.getString("if-config-flags.iff-up") != null;
 
-            portDescriptions.add(new DefaultPortDescription(lPortNumber,
-                                                            admUp && opUp && lEnabled,
-                                                            Type.COPPER,
-                                                            portSpeed,
-                                                            lannotations.build()));
+            portDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(lPortNumber)
+                    .isEnabled(admUp && opUp && lEnabled)
+                    .type(Type.COPPER)
+                    .portSpeed(portSpeed).annotations(lannotations.build())
+                    .build());
         }
     }
 
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
index faf2007..31a9480 100644
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
+++ b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
@@ -134,13 +134,23 @@
 
         DefaultAnnotations annotationOptics = DefaultAnnotations.builder().set(AnnotationKeys.PORT_NAME, "Optics")
                 .build();
-        PortDescription optics = new DefaultPortDescription(PortNumber.portNumber(0), true, Port.Type.FIBER, 1000,
-                annotationOptics);
+        PortDescription optics = DefaultPortDescription.builder()
+                .withPortNumber(PortNumber.portNumber(0))
+                .isEnabled(true)
+                .type(Port.Type.FIBER)
+                .portSpeed(1000)
+                .annotations(annotationOptics)
+                .build();
         ports.add(optics);
 
         DefaultAnnotations annotationHost = DefaultAnnotations.builder().set(AnnotationKeys.PORT_NAME, "Host").build();
-        PortDescription host = new DefaultPortDescription(PortNumber.portNumber(1), true, Port.Type.COPPER, 1000,
-                annotationHost);
+        PortDescription host = DefaultPortDescription.builder()
+                .withPortNumber(PortNumber.portNumber(1))
+                .isEnabled(true)
+                .type(Port.Type.COPPER)
+                .portSpeed(1000)
+                .annotations(annotationHost)
+                .build();
         ports.add(host);
 
         return ports;
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/config/ConfigOpticalDeviceDiscovery.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/config/ConfigOpticalDeviceDiscovery.java
index 5d09100..a38ea02 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/config/ConfigOpticalDeviceDiscovery.java
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/config/ConfigOpticalDeviceDiscovery.java
@@ -198,7 +198,12 @@
             long portSpeed = port.flatMap(OpticalPortConfig::speed).orElse(speedFallback);
             Port.Type type = port.map(OpticalPortConfig::type).orElse(Port.Type.COPPER);
 
-            portDescs.add(new DefaultPortDescription(number, isEnabled, type, portSpeed));
+            portDescs.add(DefaultPortDescription.builder()
+                    .withPortNumber(number)
+                    .isEnabled(isEnabled)
+                    .type(type)
+                    .portSpeed(portSpeed)
+                    .build());
         }
 
         return portDescs;
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java
index 2dd6edd..b0107e2 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java
@@ -139,8 +139,13 @@
                 // power value is actually signed-short value, down casting to recover sign bit.
                 builder.set(OpticalAnnotations.CURRENT_POWER, Short.toString((short) power.getPowerValue()));
             }
-            portDescs.add(new DefaultPortDescription(port.number(), port.isEnabled(),
-                    port.type(), port.portSpeed(), builder.build()));
+            portDescs.add(DefaultPortDescription.builder()
+                    .withPortNumber(port.number())
+                    .isEnabled(port.isEnabled())
+                    .type(port.type())
+                    .portSpeed(port.portSpeed())
+                    .annotations(builder.build())
+                    .build());
         }
         return portDescs;
     }
@@ -181,8 +186,13 @@
                 }
                 addLink(port.number(), neighbor);
             }
-            portDescs.add(new DefaultPortDescription(port.number(), port.isEnabled(),
-                                                     port.type(), port.portSpeed(), builder.build()));
+            portDescs.add(DefaultPortDescription.builder()
+                    .withPortNumber(port.number())
+                    .isEnabled(port.isEnabled())
+                    .type(port.type())
+                    .portSpeed(port.portSpeed())
+                    .annotations(builder.build())
+                    .build());
         }
         return portDescs;
     }
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkSwitchHandshaker.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkSwitchHandshaker.java
index 6e315cb..0a2a537 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkSwitchHandshaker.java
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkSwitchHandshaker.java
@@ -245,8 +245,13 @@
             } else {
                 builder.set(OUTPUT_PORT_STATUS, STATUS_OUT_SERVICE);
             }
-            portDescs.add(new DefaultPortDescription(port.number(), port.isEnabled(),
-                    port.type(), port.portSpeed(), builder.build()));
+            portDescs.add(DefaultPortDescription.builder()
+                    .withPortNumber(port.number())
+                    .isEnabled(port.isEnabled())
+                    .type(port.type())
+                    .portSpeed(port.portSpeed())
+                    .annotations(builder.build())
+                    .build());
         }
         return portDescs;
     }
diff --git a/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java b/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java
index 89eb22b..cba5c87 100644
--- a/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java
+++ b/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java
@@ -116,12 +116,12 @@
         Set<OvsdbPort> ports = client.getPorts();
 
         return ports.stream()
-                .map(x -> new DefaultPortDescription(
-                                PortNumber.portNumber(x.portNumber().value()),
-                                true,
-                                DefaultAnnotations.builder()
-                                        .set("portName", x.portName().value())
-                                        .build()))
+                .map(x -> DefaultPortDescription.builder()
+                        .withPortNumber(PortNumber.portNumber(x.portNumber().value()))
+                        .isEnabled(true)
+                        .annotations(DefaultAnnotations.builder()
+                                .set("portName", x.portName().value())
+                                .build()).build())
                 .collect(Collectors.toSet());
     }
 
diff --git a/drivers/server/src/main/java/org/onosproject/drivers/server/ServerDevicesDiscovery.java b/drivers/server/src/main/java/org/onosproject/drivers/server/ServerDevicesDiscovery.java
index 694320d..8d08585 100644
--- a/drivers/server/src/main/java/org/onosproject/drivers/server/ServerDevicesDiscovery.java
+++ b/drivers/server/src/main/java/org/onosproject/drivers/server/ServerDevicesDiscovery.java
@@ -446,12 +446,13 @@
 
             // Create a port description and add it to the list
             portDescriptions.add(
-                new DefaultPortDescription(
-                    portNumber, nic.status(),
-                    nic.portType(), nic.speed(),
-                    annotations.build()
-                )
-            );
+                    DefaultPortDescription.builder()
+                            .withPortNumber(portNumber)
+                            .isEnabled(nic.status())
+                            .type(nic.portType())
+                            .portSpeed(nic.speed())
+                            .annotations(annotations.build())
+                            .build());
 
             log.info(
                 "Port discovery on device {}: NIC {} is {} at {} Mbps",
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/PortDescriptionsConfig.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/PortDescriptionsConfig.java
index a387810..d7d5e53 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/PortDescriptionsConfig.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/PortDescriptionsConfig.java
@@ -97,7 +97,7 @@
                 PortNumber portNumber = createPortNumber(number, name);
 
                 DefaultPortDescription.Builder builder = DefaultPortDescription.builder()
-                        .withPortNumer(portNumber);
+                        .withPortNumber(portNumber);
                 if (portNode.has(ENABLED)) {
                     builder.isEnabled(portNode.path(ENABLED).asBoolean());
                 }
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 0d0e0fa..046cedf 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
@@ -50,7 +50,9 @@
         long portSpeed = portDescription.getPortSpeed();
         SparseAnnotations annotations = AnnotationsTranslator.asAnnotations(portDescription.getAnnotationsMap());
         // TODO How to deal with more specific Port...
-        return new DefaultPortDescription(number, isEnabled, type, portSpeed, annotations);
+        return DefaultPortDescription.builder().withPortNumber(number).isEnabled(isEnabled)
+                .type(type).portSpeed(portSpeed).annotations(annotations)
+                .build();
     }
 
     /**
diff --git a/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java b/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java
index af01f05..8990b6e 100644
--- a/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java
+++ b/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java
@@ -160,7 +160,8 @@
         assertEqualsButNotSame(DEVICE_ID, svDeviceProviderService.deviceConnectedDid);
         assertEqualsButNotSame(DDESC, svDeviceProviderService.deviceConnectedDesc);
 
-        PortDescription portDescription = new DefaultPortDescription(PORT, true, ANON);
+        PortDescription portDescription = DefaultPortDescription.builder().withPortNumber(PORT)
+                .isEnabled(true).annotations(ANON).build();
         List<PortDescription> portDescriptions = ImmutableList.of(portDescription);
         clDeviceProviderService.updatePorts(DEVICE_ID, portDescriptions);
         assertTrue(svDeviceProviderService.updatePorts.await(10, TimeUnit.SECONDS));
diff --git a/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java b/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java
index 7200c5c..806c961 100644
--- a/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java
+++ b/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java
@@ -299,7 +299,8 @@
                 portList = new ArrayList<>();
             }
             if (portNumber != null) {
-                PortDescription portDescriptions = new DefaultPortDescription(portNumber, true);
+                PortDescription portDescriptions = DefaultPortDescription.builder().withPortNumber(portNumber)
+                        .isEnabled(true).build();
                 portList.add(portDescriptions);
             }
 
diff --git a/providers/isis/topology/src/main/java/org/onosproject/provider/isis/topology/impl/IsisTopologyProvider.java b/providers/isis/topology/src/main/java/org/onosproject/provider/isis/topology/impl/IsisTopologyProvider.java
index 06c7eb1..05f87bb 100644
--- a/providers/isis/topology/src/main/java/org/onosproject/provider/isis/topology/impl/IsisTopologyProvider.java
+++ b/providers/isis/topology/src/main/java/org/onosproject/provider/isis/topology/impl/IsisTopologyProvider.java
@@ -231,7 +231,8 @@
             portList = new ArrayList<>();
         }
         if (portNumber != null) {
-            PortDescription portDescriptions = new DefaultPortDescription(portNumber, true);
+            PortDescription portDescriptions = DefaultPortDescription.builder()
+                    .withPortNumber(portNumber).isEnabled(true).build();
             portList.add(portDescriptions);
         }
         portMap.put(deviceId, portList);
diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
index 9cf81d0..f675dbc 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
@@ -356,9 +356,14 @@
                         Port port = deviceService.getPort(deviceId, portNumber);
                         //rebuilding port description with admin state changed.
                         providerService.portStatusChanged(deviceId,
-                                new DefaultPortDescription(portNumber, enable, false,
-                                        port.type(), port.portSpeed(),
-                                        (SparseAnnotations) port.annotations()));
+                                DefaultPortDescription.builder()
+                                        .withPortNumber(portNumber)
+                                        .isEnabled(enable)
+                                        .isRemoved(false)
+                                        .type(port.type())
+                                        .portSpeed(port.portSpeed())
+                                        .annotations((SparseAnnotations) port.annotations())
+                                        .build());
                     } else {
                         log.warn("Your device {} port {} status can't be changed to {}",
                                 deviceId, portNumber, enable);
diff --git a/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java b/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java
index c16de45..29d16ba 100644
--- a/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java
+++ b/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java
@@ -286,7 +286,8 @@
 
     private void prepareMocks(int count) {
         for (int i = 1; i <= count; i++) {
-            deviceDescription.portDescriptions.add(new DefaultPortDescription(PortNumber.portNumber(i), true));
+            deviceDescription.portDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(PortNumber.portNumber(i)).isEnabled(true).build());
         }
     }
 
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java b/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
index 98efd7c..775a2d7 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
@@ -396,8 +396,12 @@
     protected List<PortDescription> buildPorts(int portCount) {
         List<PortDescription> ports = Lists.newArrayList();
         for (int i = 1; i <= portCount; i++) {
-            ports.add(new DefaultPortDescription(PortNumber.portNumber(i), true,
-                                                 Port.Type.COPPER, 0));
+            ports.add(DefaultPortDescription.builder()
+                    .withPortNumber(PortNumber.portNumber(i))
+                    .isEnabled(true)
+                    .type(Port.Type.COPPER)
+                    .portSpeed(0)
+                    .build());
         }
         return ports;
     }
diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
index cfaf107..fad323e 100644
--- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -1163,11 +1163,13 @@
             if (ether.isPresent()) {
                 // ethernet port
                 // TODO parse other part of OFPortDescPropEthernet if necessary
-                return new DefaultPortDescription(portNo,
-                                                  enabled,
-                                                  COPPER,
-                                                  portSpeed(port),
-                                                  annotations.build());
+                return DefaultPortDescription.builder()
+                        .withPortNumber(portNo)
+                        .isEnabled(enabled)
+                        .type(COPPER)
+                        .portSpeed(portSpeed(port))
+                        .annotations(annotations.build())
+                        .build();
             }
 
             Optional<OFPortDescPropOptical> optical = port.getProperties().stream()
@@ -1237,19 +1239,23 @@
 
                 // TODO How to determine appropriate port type?
 
-                return new DefaultPortDescription(portNo,
-                                                  enabled,
-                                                  FIBER,
-                                                  portSpeed(port),
-                                                  annotations.build());
+                return DefaultPortDescription.builder()
+                        .withPortNumber(portNo)
+                        .isEnabled(enabled)
+                        .type(FIBER)
+                        .portSpeed(portSpeed(port))
+                        .annotations(annotations.build())
+                        .build();
             }
 
             // fall back default
-            return new DefaultPortDescription(portNo,
-                                              enabled,
-                                              COPPER,
-                                              portSpeed(port),
-                                              annotations.build());
+            return DefaultPortDescription.builder()
+                    .withPortNumber(portNo)
+                    .isEnabled(enabled)
+                    .type(COPPER)
+                    .portSpeed(portSpeed(port))
+                    .annotations(annotations.build())
+                    .build();
 
         }
 
@@ -1272,8 +1278,13 @@
             SparseAnnotations annotations = makePortAnnotation(port.getName(),
                                                                port.getHwAddr().toString(),
                                                                adminDown).build();
-            return new DefaultPortDescription(portNo, enabled, type,
-                                              portSpeed(port), annotations);
+            return DefaultPortDescription.builder()
+                    .withPortNumber(portNo)
+                    .isEnabled(enabled)
+                    .type(type)
+                    .portSpeed(portSpeed(port))
+                    .annotations(annotations)
+                    .build();
         }
 
         /**
@@ -1349,7 +1360,13 @@
                     break;
             }
 
-            return new DefaultPortDescription(portNo, enabled, FIBER, 0, annotations);
+            return DefaultPortDescription.builder()
+                    .withPortNumber(portNo)
+                    .isEnabled(enabled)
+                    .type(FIBER)
+                    .portSpeed(0)
+                    .annotations(annotations)
+                    .build();
         }
 
         /**
diff --git a/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java b/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java
index 9555f99..f77cb3e 100644
--- a/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java
+++ b/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java
@@ -211,11 +211,13 @@
             }
             //Updating ports of the link
             List<PortDescription> srcPortDescriptions = new LinkedList<>();
-            srcPortDescriptions.add(new DefaultPortDescription(linkDes.src().port(), true));
+            srcPortDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(linkDes.src().port()).isEnabled(true).build());
             deviceProviderService.updatePorts(linkDes.src().deviceId(), srcPortDescriptions);
 
             List<PortDescription> dstPortDescriptions = new LinkedList<>();
-            dstPortDescriptions.add(new DefaultPortDescription(linkDes.dst().port(), true));
+            dstPortDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(linkDes.dst().port()).isEnabled(true).build());
             deviceProviderService.updatePorts(linkDes.dst().deviceId(), dstPortDescriptions);
             linkProviderService.linkDetected(linkDes);
         }
@@ -229,11 +231,13 @@
             LinkDescription linkDes = buildLinkDes(ospfRouter, ospfLinkTed);
             //Updating ports of the link
             List<PortDescription> srcPortDescriptions = new LinkedList<>();
-            srcPortDescriptions.add(new DefaultPortDescription(linkDes.src().port(), true));
+            srcPortDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(linkDes.src().port()).isEnabled(true).build());
             deviceProviderService.updatePorts(linkDes.src().deviceId(), srcPortDescriptions);
 
             List<PortDescription> dstPortDescriptions = new LinkedList<>();
-            dstPortDescriptions.add(new DefaultPortDescription(linkDes.dst().port(), true));
+            dstPortDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(linkDes.dst().port()).isEnabled(true).build());
             deviceProviderService.updatePorts(linkDes.dst().deviceId(), dstPortDescriptions);
             linkProviderService.linkVanished(linkDes);
         }
@@ -243,4 +247,4 @@
             log.info("Router changed is not supported currently");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java b/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
index ad37efc..ec0bba6 100644
--- a/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
+++ b/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
@@ -139,7 +139,8 @@
 
     private void prepareMocks(int count) {
         for (int i = 1; i <= count; i++) {
-            deviceDescription.portDescriptions.add(new DefaultPortDescription(PortNumber.portNumber(i), true));
+            deviceDescription.portDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(PortNumber.portNumber(i)).isEnabled(true).build());
         }
     }
 
diff --git a/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java b/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
index 02d5664..c4f6a50 100644
--- a/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
+++ b/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
@@ -163,9 +163,13 @@
         if (port != null) {
             SparseAnnotations annotations = DefaultAnnotations.builder()
                     .putAll(port.annotations()).build();
-            portList.add(new DefaultPortDescription(port.number(), port.isEnabled(),
-                                                    port.type(), port.portSpeed(),
-                                                    annotations));
+            portList.add(DefaultPortDescription.builder()
+                    .withPortNumber(port.number())
+                    .isEnabled(port.isEnabled())
+                    .type(port.type())
+                    .portSpeed(port.portSpeed())
+                    .annotations(annotations)
+                    .build());
         }
 
         portMap.put(dpid.value(), portList);
