diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index a5b131d..2cda872 100644
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -289,12 +289,23 @@
 			}
 		}
 	}
+	capacity := uint32(of.OfpPortFeatures_OFPPF_1GB_FD | of.OfpPortFeatures_OFPPF_FIBER)
 	//    Now create  Port
 	port := &voltha.Port{
 		PortNo:     portNum,
 		Label:      label,
 		Type:       portType,
 		OperStatus: operStatus,
+		OfpPort: &of.OfpPort{
+			HwAddr:     macAddressToUint32Array(dh.device.MacAddress),
+			Config:     0,
+			State:      uint32(of.OfpPortState_OFPPS_LIVE),
+			Curr:       capacity,
+			Advertised: capacity,
+			Peer:       capacity,
+			CurrSpeed:  uint32(of.OfpPortFeatures_OFPPF_1GB_FD),
+			MaxSpeed:   uint32(of.OfpPortFeatures_OFPPF_1GB_FD),
+		},
 	}
 	logger.Debugw("sending-port-update-to-core", log.Fields{"port": port})
 	// Synchronous call to update device - this method is run in its own go routine
@@ -848,27 +859,6 @@
 	}, nil
 }
 
-//GetOfpPortInfo Get Ofp port information
-func (dh *DeviceHandler) GetOfpPortInfo(device *voltha.Device, portNo int64) (*ic.PortCapability, error) {
-	capacity := uint32(of.OfpPortFeatures_OFPPF_1GB_FD | of.OfpPortFeatures_OFPPF_FIBER)
-	return &ic.PortCapability{
-		Port: &voltha.LogicalPort{
-			OfpPort: &of.OfpPort{
-				HwAddr:     macAddressToUint32Array(dh.device.MacAddress),
-				Config:     0,
-				State:      uint32(of.OfpPortState_OFPPS_LIVE),
-				Curr:       capacity,
-				Advertised: capacity,
-				Peer:       capacity,
-				CurrSpeed:  uint32(of.OfpPortFeatures_OFPPF_1GB_FD),
-				MaxSpeed:   uint32(of.OfpPortFeatures_OFPPF_1GB_FD),
-			},
-			DeviceId:     dh.device.Id,
-			DevicePortNo: uint32(portNo),
-		},
-	}, nil
-}
-
 func (dh *DeviceHandler) omciIndication(omciInd *oop.OmciIndication) error {
 	logger.Debugw("omci-indication", log.Fields{"intfID": omciInd.IntfId, "onuID": omciInd.OnuId, "device-id": dh.device.Id})
 	var deviceType string
diff --git a/internal/pkg/core/device_handler_test.go b/internal/pkg/core/device_handler_test.go
index 53641fa..531c27b 100644
--- a/internal/pkg/core/device_handler_test.go
+++ b/internal/pkg/core/device_handler_test.go
@@ -1022,39 +1022,6 @@
 	}
 }
 
-func TestDeviceHandler_GetOfpPortInfo(t *testing.T) {
-	dh1 := newMockDeviceHandler()
-	dh2 := negativeDeviceHandler()
-	type args struct {
-		device *voltha.Device
-		portNo int64
-	}
-	tests := []struct {
-		name          string
-		devicehandler *DeviceHandler
-		args          args
-		wantErr       bool
-	}{
-		{"GetOfpPortInfo-1", dh1, args{device: dh1.device, portNo: 1}, false},
-		{"GetOfpPortInfo-2", dh2, args{device: dh2.device, portNo: 1}, false},
-		{"GetOfpPortInfo-3", dh1, args{device: dh1.device, portNo: 0}, false},
-		{"GetOfpPortInfo-4", dh2, args{device: dh2.device, portNo: 0}, false},
-		{"GetOfpPortInfo-5", dh1, args{device: &voltha.Device{}, portNo: 1}, false},
-		{"GetOfpPortInfo-6", dh2, args{device: &voltha.Device{}, portNo: 0}, false},
-		// TODO: Add test cases.
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			dh := tt.devicehandler
-			_, err := dh.GetOfpPortInfo(tt.args.device, tt.args.portNo)
-			if (err != nil) != tt.wantErr {
-				t.Errorf("DeviceHandler.GetOfpPortInfo() error = %v, wantErr %v", err, tt.wantErr)
-				return
-			}
-		})
-	}
-}
-
 func TestDeviceHandler_onuDiscIndication(t *testing.T) {
 
 	dh1 := newMockDeviceHandler()
diff --git a/internal/pkg/core/openolt.go b/internal/pkg/core/openolt.go
index 3704945..4a25dba 100644
--- a/internal/pkg/core/openolt.go
+++ b/internal/pkg/core/openolt.go
@@ -161,15 +161,6 @@
 	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
 }
 
-//Get_ofp_port_info returns OFP port information for the given device
-func (oo *OpenOLT) Get_ofp_port_info(device *voltha.Device, portNo int64) (*ic.PortCapability, error) {
-	logger.Infow("Get_ofp_port_info", log.Fields{"deviceId": device.Id})
-	if handler := oo.getDeviceHandler(device.Id); handler != nil {
-		return handler.GetOfpPortInfo(device, portNo)
-	}
-	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
-}
-
 //Process_inter_adapter_message sends messages to a target device (between adapters)
 func (oo *OpenOLT) Process_inter_adapter_message(msg *ic.InterAdapterMessage) error {
 	logger.Debugw("Process_inter_adapter_message", log.Fields{"msgId": msg.Header.Id})
diff --git a/internal/pkg/core/openolt_test.go b/internal/pkg/core/openolt_test.go
index 323ec8c..22a61c2 100644
--- a/internal/pkg/core/openolt_test.go
+++ b/internal/pkg/core/openolt_test.go
@@ -455,48 +455,6 @@
 	}
 }
 
-func TestOpenOLT_Get_ofp_port_info(t *testing.T) {
-	type args struct {
-		device *voltha.Device
-		portNo int64
-	}
-	tests := []struct {
-		name    string
-		fields  *fields
-		args    args
-		want    *ic.PortCapability
-		wantErr error
-	}{
-		{"get_ofp_port_info-1", mockOlt(), args{mockDevice(), 1}, &ic.PortCapability{
-			Port: &voltha.LogicalPort{
-				DeviceId:     "olt",
-				DevicePortNo: uint32(1),
-				OfpPort: &openflow_13.OfpPort{
-					HwAddr:     []uint32{1, 2, 3, 4, 5, 6},
-					State:      uint32(4),
-					Curr:       uint32(4128),
-					Advertised: uint32(4128),
-					Peer:       uint32(4128),
-					CurrSpeed:  uint32(32),
-					MaxSpeed:   uint32(32),
-				},
-			},
-		}, nil},
-		{"get_ofp_port_info-2", &fields{}, args{mockDevice(), 1}, nil,
-			olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": "olt"}, nil)},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			oo := testOltObject(tt.fields)
-			got, err := oo.Get_ofp_port_info(tt.args.device, tt.args.portNo)
-			if !reflect.DeepEqual(err, tt.wantErr) || !reflect.DeepEqual(got, tt.want) {
-				t.Errorf("Get_ofp_port_info() got = %v want = %v error = %v, wantErr = %v",
-					got, tt.want, err, tt.wantErr)
-			}
-		})
-	}
-}
-
 func TestOpenOLT_Health(t *testing.T) {
 	tests := []struct {
 		name    string
